[Haskell-beginners] question about list processing

Dennis Raddle dennis.raddle at gmail.com
Thu Nov 12 14:58:25 UTC 2015


Oh I needed join.

computeHead :: (a -> [b]) -> [a] -> [b]
computeHead f = join . take 1 . fmap f

That's because

f :: a -> [b]

not

f: a -> b


On Thu, Nov 12, 2015 at 5:22 AM, Martin Vlk <martin at vlkk.cz> wrote:

> How about:
>
> computeHead f = take 1 . fmap f
>
> Martin
>
> Dennis Raddle:
> > What would be an elegant way of writing this
> >
> > computeHead :: (a -> [b]) -> [a] -> [b]
> >
> > Where when [a] is null, it returns a null list, but when [a] contains one
> > or more elements, it applies the given function to the head of a and
> > returns that? Is there some existing typeclass operator that facilitates
> > this?
> >
> > You can write
> >
> > computeHead _ [] = []
> > computeHead f (x:_) = f x
> >
> > But that first line seems suspicious to me... it makes me think about how
> > in the list Monad, an empty list falls through. But I can't quite make it
> > work.
> >
> >
> >
> > _______________________________________________
> > Beginners mailing list
> > Beginners at haskell.org
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
> >
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20151112/962131e5/attachment.html>


More information about the Beginners mailing list