
Hello! I have a function like this: http://rafb.net/p/8E66FI29.html, starting with evalState. The problem is with checkPredName cause it's return type is SemanticError what's not a monadic value but case waiting for m a (as the error message sais), but if I use return to checkPredName then ofc the pattern match will fail. How can I fix this? Regards, David

On 23 Jan 2009, at 15:40, Kovacs David wrote:
Hello!
I have a function like this: http://rafb.net/p/8E66FI29.html, starting with evalState. The problem is with checkPredName cause it's return type is SemanticError what's not a monadic value but case waiting for m a (as the error message sais), but if I use return to checkPredName then ofc the pattern match will fail. How can I fix this?
This looks a lot to me like you need to look at the Error e => Either e applicative. Bob

On 23 Jan 2009, at 15:40, Kovacs David wrote:
Hello!
I have a function like this: http://rafb.net/p/8E66FI29.html, starting with evalState. The problem is with checkPredName cause it's return type is SemanticError what's not a monadic value but case waiting for m a (as the error message sais), but if I use return to checkPredName then ofc the pattern match will fail. How can I fix this?
Oops, sorry, I meant monad, because this monad unfortunately doesn't have it's associated Applicative instance (which is much nicer to work with). You can ofc create the standard applicative instance: instance Error e => Applicative (Either e) where pure = return (<*>) = ap Bob

Kovacs David wrote:
Hello!
I have a function like this: http://rafb.net/p/8E66FI29.html, starting with evalState. The problem is with checkPredName cause it's return type is SemanticError what's not a monadic value but case waiting for m a (as the error message sais), but if I use return to checkPredName then ofc the pattern match will fail. How can I fix this?
Regards, David
You can use liftM/fmap to lift a function into a monad: case (checkPredName pn . snd) `fmap` get of ...

Daniel Schoepe wrote:
Daniel Schoepe wrote:
You can use liftM/fmap to lift a function into a monad: case (checkPredName pn . snd) `fmap` get of ...
I'm sorry, I misunderstood the problem, so this suggestion wouldn't work either. Could you give some more information on what SemanticResult is?
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
It looks like this: data SemanticResult = Ok | Error String;
participants (3)
-
Daniel Schoepe
-
Kovacs David
-
Thomas Davie