In search of: [a->b] -> a -> [b]
Derek Elkins
ddarius@hotpop.com
Fri, 20 Jun 2003 05:38:51 -0400
On Thu, 19 Jun 2003 18:05:11 +0200
Christian Sievers <sievers@math2.nat.tu-bs.de> wrote:
> Derek Elkins wrote:
>
> > > flist :: [a->b] -> a -> [b]
> > > flist fs a = map (flip ($) a) fs
> > or much nicer (IMO)
> > flist fs a = map ($ a) fs
>
> This is a case where I'd prefer a list comprehension:
>
> flist fs a = [ f a | f <- fs ]
>
> (and this could be a monad comprehension, if Haskell still had
> them...)
I don't think Haskell ever had them (I'd have to check).
Gofer did. Anyways, do-notation is about as expressive as monad
comprehensions. With do-notation you have to add guards explicitly, but
you don't have to end with a return and you don't need to bind
variables, e.g. I believe [() | _ <- putStrLn "foo"] would be necessary
(well, not in this case, but the general one).
> > the generalized solution being simply,
> > f mf x = do
> > f <- mf
> > return (f x)
>
> Or just replace map by fmap in your flist from above.
That generalizes it, but in a different way since (in Haskell) Monad
isn't a subclass of Functor...