unfoldr with a little extra

Edward Kmett's NonEmpty module has a version of unfoldr (there just called unfoldr) for non-empty lists that seems also to be useful when applied to regular lists: unfoldr1::(b -> (a, Maybe b)) -> b -> [a] unfoldr1 f b= go b where go q = case f q of (a,may_b) -> a : maybe [] go may_b My question is whether it is possible to write this function using the usual unfoldr. I have the feeling there might be some way, but I just can't see it. David

David Feuer wrote:
unfoldr1::(b -> (a, Maybe b)) -> b -> [a] unfoldr1 f b= go b where go q = case f q of (a,may_b) -> a : maybe [] go may_b
My question is whether it is possible to write this function using the usual unfoldr. I have the feeling there might be some way, but I just can't see it.
We need some common ground between f :: b -> (a, Maybe b) and the type of the first argument of unfoldr, b -> Maybe (a, b); the best I can see is (fmap f) :: Maybe b -> Maybe (a, Maybe b). So unfoldr1 f b = unfoldr (fmap f) (Just b) Cheers, Bertram
participants (2)
-
Bertram Felgenhauer
-
David Feuer