
Am Sonntag 21 Februar 2010 21:26:31 schrieb Vojtěch Knyttl:
Ok, the problem was the Monad, which I still don't get completely, because I continue like this:
data Field = W|B|H|D deriving (Eq,Show)
pas :: ST s (STArray s (Int, Int) Field) -> ST s (STArray s (Int, Int) Field) pas b = do writeArray b (1,1) W
Here, b has type (STArray s (Int,Int) Field), and writeArray has type ghci> :t writeArray writeArray :: (MArray a e m, Ix i) => a i e -> i -> e -> m () , in this case (STArray s (Int,Int) Field -> (Int,Int) -> Field -> ST s (), so the signature ought to be pas :: STArray s (Int,Int) Field -> ST s () It's new[List]Array, readArray, writeArray etc which have a type of ... -> ST s something the array itself doesn't.
And still getting: Couldn't match expected type `STArray s (Int, Int) Field' against inferred type `Field'
That's puzzling. I'd expect a different error message.
Thanks.