
With the join it's the same thing as:
computeHead :: (a -> [b]) -> [a] -> [b]
computeHead f xs = take 1 xs >>= f
On Thu, 12 Nov 2015 at 06:58 Dennis Raddle
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
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@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners