withPrevious' :: Coroutine a (a,a)
withPrevious' = Coroutine $ \i -> ((i,i), Just $ step i) where
    step old = Coroutine $ \i -> ((i, old), Just $ step i)
withPrevious' :: Coroutine a (a,a)
withPrevious' = Coroutine $ \i -> ((i,i), Just $ step i) where
    step old = Coroutine $ \i -> ((i, old), Just $ step i)
withPrevious' = Coroutine $ \i -> ((i,i), Just $ step i) where
    step old = Coroutine $ \i -> ((i, old), Just $ step i)