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

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

--
Ozgur Akgun
```