
Hi, I created a gist with a minimal (still 111 lines) module: https://gist.github.com/2898128 I still get the errors: WhatsWrong.hs:53:5: Couldn't match type `s' with `PrimState (ST s)' `s' is a rigid type variable bound by a type expected by the context: ST s [Move] at WhatsWrong.hs:48:21 In a stmt of a 'do' block: listMoves ml In the second argument of `($)', namely `do { v <- U.new maxMovesPerPos; let ml = ...; listMoves ml }' In the expression: runST $ do { v <- U.new maxMovesPerPos; let ml = ...; listMoves ml } WhatsWrong.hs:65:44: Couldn't match type `s' with `PrimState (ST s)' `s' is a rigid type variable bound by the type signature for nextPhaseOnlyCapts :: GenPhase s at WhatsWrong.hs:64:1 Expected type: U.MVector (PrimState (ST s)) Move Actual type: U.MVector s Move In the return type of a call of `mlVec' In the third argument of `genCapts', namely `(mlVec ml)' Thanks, Nicu Am 08.06.2012 02:47, schrieb Silvio Frischknecht:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Now comes my question: in the impure values there is always that "s". I was thinking that the whole structure should have s as a parameter: Yes
data MList s = MList { mlVec :: MVector s Move, mlNextPh :: MList -> ST s (Maybe (MList s)) } you probably meant:
data MList s = MList { ... , mlNextPh :: Mlist s -> ... }
Now I'm not sure about your exact problem since the following compiles for me.
import Data.Vector import Data.Vector.Mutable import Control.Monad.ST
type Move = () data MList s = MList { mvVec :: MVector s Move, mlNextPh :: MList s -> ST s (Maybe (MList s)) }
splitMove :: MList s -> ST s (Maybe (Move, MList s)) splitMove ml = do m<- unsafeRead (mvVec ml) 0 undefined
Something you always have to watch out for when dealing with ST is not to return something that depends on s in the last statement (the one you use runST on). In other words, if you want to return a vector you have to freeze it, so it's not mutable anymore.
If you still can't figure it out paste some complete example that doesn't work.
silvio -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iQIcBAEBAgAGBQJP0Uu5AAoJEDLsP+zrbatWKFoP+wYdmAwO3aKPIibOydDwPlcu GmwWLCDoylhBsA1swskPGZTlBevFFeS0kzDMAhZ2dtR18HHf0TVLFCL6mljgQGhu YLsT8a2Y5eepPd7CC0wHD7qLH0t6ln/urRhWNnVEGryVHmsIDCBzuKBzopshaaOm 8awNeEbmZApki193r/YJ21Zsxidx4N2tSGCd712ka9Wr7l19RzBukonTy/wNCTtN 1sj54xCKap3MpnQe4L68nep6WjMovnwn5ucPWlouPP5N99/2umiEPDwX3y9moD/Q VkbYe0HzZtvSX7JJaDM/hJ2dWKHsg5CLdO/aW7Uz3HttTy0/FmvwhxaNAzkmQimw L4uakvyuw1EJuSAwB5XRfeUL6LDpka165jb8V8Iy2gjYg3aGMwf9VVmObjEAA93s nvQd+iH1lDe38cbfz8dfQdTakDVYtFNnYL+kXIF1Z7DiS25IThtS0RJRH//E+CZg MpOtW2LBfa3vwP9NqVryGTAhWFtWHXOtpXfCXOa0+pQNn1zHkTXtIDJ4XoT5qkmd 6GDwFyGfkPZO01qNMoXwj/wBz/eaSa4Vj0qb73jNdNH2MbJ13Ws9Jlp4jwcxbG4a m/fYV0/6LmPEiV8H9+4cG8nhUP2ie2DJqo8tzdjiaZ7C7TEym9jd6gsljMQ8qiAG Q7aAmMed/DBlY/Anh2xY =X9CL -----END PGP SIGNATURE-----