Proposal: add unfoldr1 to the somewhere in base

David Feuer david.feuer at gmail.com
Fri Aug 1 23:21:41 UTC 2014


Way back in 2001, Shin-Cheng Mu proposed an unfoldr1 combinator:
http://code.haskell.org/~dons/haskell-1990-2000/msg06775.html

I discussed this a bit with shachaf in #haskell, and he noted that a
similar function, with a slightly different but isomorphic type,
appears in Edward Kmett's semigroups package as the unfoldr for
NonEmpty.

I propose that we add this. It can be written

unfoldr1 :: (b -> (a, Maybe b)) -> b -> [a]
unfoldr1 f b = go b
  where
    go b = case f b of
       (a, may_b) -> a : maybe [] go may_b

With the appropriate RULES, it can be wrapped up in build and fuse properly.

I'd love to see this written as an unfoldr instead. Does anyone know
if that's possible?


More information about the Libraries mailing list