module Control.Comonad.Discont.Class
( ComonadDiscont(..)
) where
import Control.Comonad
import qualified Control.Comonad.Trans.Discont.Strict as Strict
import qualified Control.Comonad.Trans.Discont.Lazy as Lazy
import qualified Control.Comonad.Trans.Discont.Memo as Memo
class Comonad w => ComonadDiscont s w | w -> s where
callCV :: w (w (w a -> a) -> b) -> b
instance ComonadDiscont s w => ComonadDiscont s (Lazy.DiscontT k w) where
callCV = Lazy.callCV
instance ComonadDiscont s w => ComonadDiscont s (Memo.DiscontT k w) where
callCV = Memo.callCV
instance ComonadDiscont s w => ComonadDiscont s (Strict.DiscontT k w) where
callCV = Strict.callCV