[Haskell-beginners] Eliminate repetitive monad/list code
Ozgur Akgun
ozgurakgun at gmail.com
Thu Nov 4 12:33:14 EDT 2010
Hi!
do
x <- foo
bar' x 1
is equivalent to:
foo >>= \ x -> bar' x 1
which is equivalent to
flip bar' 1 =<< foo
so, for the whole thing, you can say:
do
flip bar' 1 =<< foo
flip bar' 2 =<< foo
flip bar' 3 =<< foo
and if you define bar'' as,
bar'' = flip bar'
then it boils down to,
do
bar'' 1 =<< foo
bar'' 2 =<< foo
bar'' 3 =<< foo
To further get rid of the foo's, you might want to have a look at the
Reader monad. But that would be overkill, I think.
HTH,
On 4 November 2010 16:19, John Smith <voldermort at hotmail.com> wrote:
>
> I have code which looks like this:
>
> foo :: IO A
>
> bar :: Bool -> A -> Int -> Bool -> IO ()
>
> do
> x <- foo
> y <- foo
> z <- foo
>
> bar True x 1 False
> bar True y 2 False
> bar True z 3 False
>
> What is the best way to factor it, including eliminating the temporary x,y,z variables? I can get this down to
>
> foo :: IO A
>
> bar :: Bool -> A -> Int -> Bool -> IO ()
>
> bar' a b = bar True a b False
>
> do
> x <- foo
> y <- foo
> z <- foo
>
> bar x 1
> bar y 2
> bar z 3
>
> but I don't know what to do next. Is there some form of list comprehension or combination of map and lift which will eliminate the repetition?
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
--
Ozgur Akgun
More information about the Beginners
mailing list