module Next.Interface.Class
(
TerminableStream (..),
next,
)
where
import Next.Interface.Type
class TerminableStream item interface | interface -> item where
liftNext :: Next item result -> interface result
instance TerminableStream item (Next item) where
liftNext :: forall result. Next item result -> Next item result
liftNext Next item result
x = Next item result
x
next :: TerminableStream item interface => interface (Step item)
next :: forall item (interface :: * -> *).
TerminableStream item interface =>
interface (Step item)
next = forall item (interface :: * -> *) result.
TerminableStream item interface =>
Next item result -> interface result
liftNext forall item result. (result ~ Step item) => Next item result
Next