[Haskell-cafe] Still stacking monad transformers
Andrew Coppin
andrewcoppin at btinternet.com
Mon Oct 13 13:28:41 EDT 2008
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...
More information about the Haskell-Cafe
mailing list