Was ist los in dieser Typensignatur? (Vector.Mutable-Modifikatoren in Haskell)

Mutable Vektoren in Haskell haben drei Mutatoren auf Elementebene:

read :: PrimMonad m => MVector (PrimState m) a -> Int -> m a
write :: PrimMonad m => MVector (PrimState m) a -> Int -> a -> m ()
swap :: PrimMonad m => MVector (PrimState m) a -> Int -> Int -> m ()

Jetzt kann ich diese gut verwenden -

import Data.Vector
import Data.Vector.Mutable 
import Control.Monad.ST
import Control.Monad.Primitive 

incrAt :: Vector Double -> Int -> Vector Double
incrAt vec i = runST $ do
  mvec <- thaw vec
  oldval <- read mvec i
  write mvec i (oldval + 1)
  freeze mvec

Aber was ist hier los? Was ist einPrimMonad? Und istPrimState ein Konstrukteur?

Ich verstehe, dass es hier eine Bindung gibt, auf einePrimMonad Klassenmonade.thaw kehrt zurückm (MVector (PrimState m) a), woherm ist einPrimMonad... aber die Monade enthält sich selbst? Warum istm im Kontext eines anderenm?

Ich sehe, dass dies im Grunde genommen alles verbindlich istPrimState oderPrimMonad, aber ich verstehe nicht, wie das mit veränderlichen / speicherbaren Vektoren zu tun hat. Gibt es etwas Besonderes an diesen Typklassen, mit denen sie den Status speichern können?

Vielen Dank für Ihre Zeit!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage