{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances, UndecidableInstances #-} ----------------------------------------------------------------------------- -- | -- Module : Control.Comonad.Discont.Class -- Copyright : (C) 2008-2011 Edward Kmett -- License : BSD-style (see the file LICENSE) -- -- Maintainer : Edward Kmett -- Stability : experimental -- Portability : non-portable (fundeps, MPTCs) ---------------------------------------------------------------------------- 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