{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeFamilies #-} module Data.Stream ( Stream (..), ) where import Data.Kind (Type) class Ord (Pos s) => Stream s where type Item s :: Type type Pos s :: Type next :: s -> Maybe (Item s, s) getPos :: s -> Pos s