[Haskell-cafe] Re: (a -> [b]) -> [a -> b] ?
apfelmus at quantentunnel.de
apfelmus at quantentunnel.de
Wed Dec 6 06:28:39 EST 2006
> while pondering over the four fours problem, I wondered: Is there a
> function of type
> (a -> [b]) -> [a -> b]
>
> It looks a bit like sequence when applied in the ((->) a) Monad:
> sequence :: [a -> b] -> a -> [b]
> but I was looking for the other direction.
>
> I came up with:
> \g -> map (\n a -> g a !! n) [1..]
> which has the desired type and functionality, but it looks rather
> inelegant and messy. Any better ideas?
While you showed that there exists
unsequence :: (a -> [b]) -> [a -> b] ,
I doubt that it's very useful. The point is that (sequence) is not
surjective: (a -> [b]) has strictly more functions than [a -> b]. (a ->
[b]) has the freedom to adjust the length of the resulting depending on
a list whereas [a -> b] hasn't.
(sequence) converts an Applicative Functor to a Monad but there is no
canonical other way round. In other words,
unsequence . sequence === id
but sequence . unsequence =/= id
Regards,
apfelmus
More information about the Haskell-Cafe
mailing list