Standard Haskell function :: (a -> Maybe a) -> a -> [a]

haskell, list, option-type

Solution

Your function isn't in the standard libraries because it's a specialized form of one that is:

unfoldr      :: (b -> Maybe (a, b)) -> b -> [a]
unfoldr f b  =
  case f b of
   Just (a,new_b) -> a : unfoldr f new_b
   Nothing        -> []

That said, the case where the list elements are the same as the sequence of seed values is common, and it's clumsy to write in terms of just `unfoldr` and other standard functions, so I'm not sure why it's not in the standard libraries as well.

Problem

I have a function defined ``` maybeToList :: (a -> Maybe a) -> a -> [a] maybeToList f x = x : maybe [] (maybeToList f) (f x) ``` This function seems so obvious that I can't believe it is not standard. Is it defined in some module (I already checked Data.Maybe)?

Original source