    module DeferredFolds.Defs.UnfoldrM where

    import DeferredFolds.Prelude
    import DeferredFolds.Types

    unfoldr :: (Monad m) => Unfoldr a -> UnfoldrM m a
    unfoldr :: forall (m :: * -> *) a. Monad m => Unfoldr a -> UnfoldrM m a
    unfoldr (Unfoldr forall x. (a -> x -> x) -> x -> x
    unfoldr) = (forall x. (a -> x -> m x) -> x -> m x) -> UnfoldrM m a
    forall (m :: * -> *) a.
    (forall x. (a -> x -> m x) -> x -> m x) -> UnfoldrM m a
    UnfoldrM ((forall x. (a -> x -> m x) -> x -> m x) -> UnfoldrM m a)
    -> (forall x. (a -> x -> m x) -> x -> m x) -> UnfoldrM m a
    forall a b. (a -> b) -> a -> b
    $ \a -> x -> m x
    stepM ->
      let step :: a -> (x -> m x) -> x -> m x
    step a
    input x -> m x
    act x
    state = a -> x -> m x
    stepM a
    input x
    state m x -> (x -> m x) -> m x
    forall a b. m a -> (a -> m b) -> m b
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= x -> m x
    act
       in (a -> (x -> m x) -> x -> m x) -> (x -> m x) -> x -> m x
    forall x. (a -> x -> x) -> x -> x
    unfoldr a -> (x -> m x) -> x -> m x
    step x -> m x
    forall a. a -> m a
    forall (m :: * -> *) a. Monad m => a -> m a
    return