module Gamgine.Coroutine where newtype Coroutine i o = Coroutine { forall i o. Coroutine i o -> i -> (o, Coroutine i o) runCoroutine :: i -> (o, Coroutine i o) } newtype CoroutineM m i o = CoroutineM { forall (m :: * -> *) i o. CoroutineM m i o -> i -> m (o, CoroutineM m i o) runCoroutineM :: i -> m (o, CoroutineM m i o) }