Reid Barton wrote:
It's not difficult: the operation is called

mplus :: MyMonad a -> MyMonad a -> MyMonad a

and already exists (assuming the author of ListT has not forgotten to
write a MonadPlus instance).

I see... I was under the impression that "mplus" is just any arbitrary binary operation over a given monad. How do you know what it does for a specific monad?

Anyway, utilising this trick, I now have my function working quite well. Implementing negation is the only hard part; I need to unwind everything down to the list level, and check whether the list is empty, and do something different depending on whether it is or it isn't:

 foo = do
   ...
   let x = run_some_moadic_action
   if null x
     then ...
     else ...

This obviously fails since "x" isn't a list, it's a StateT MyState (ListT (ErrorT MyError Ideneity)) x. I can't see a "nice" way to handle this. I found a way that works, but it's quite ugly...

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to