hi,
at some level you are right that some more syntactic sugar
and stuff could make monads more atracitve. for the time
being here is how i'd write what you want bellow:

f # m           = liftM f m
mx === my  = liftM2 (==) m1 m2

assertBool "fail" $ (length # someFunc a) === (length # someFunc b)

at the moment we only have syntactic sugar for working with the list monad
(list comprehensions etc), and environemnt (aka reader) monad (implicit parameters).


hope this helps
-iavor

Sean E. Russell wrote:

Hello,

I posted this question to comp.lang.functional, and someone suggested that I try this group instead.

I'm struggling with monads. Well, not monads themselves, but mixing them with non-monadic functions.

Here's my base case:

        someFunc :: String -> IO [a]
        ...
                ax <- someFunc a
                bx <- someFunc b
                assertBool "fail" $ length ax == length bx

I don't like the assignments; the typing is redundant, if I have a lot of asserts like this, and the "variables" are temporary. What I'd much rather have is:

        ...
                assertBool "fail" $ (length $ someFunc a) == (length $ someFunc b)

which is more readable, to my eye.

The only solution which has been suggested that may work is liberal use of the liftM variants, but this gets *really* tedious and obtuse.

Is there an elegant way to do what I want to do, or am I stuck with procedural-style assignments and bunches of temp vars?

Thanks!




_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell

Reply via email to