freer-par-monad-0.1.0.0: src/Control/Monad/Freer/Par/Funable.hs
{-# LANGUAGE KindSignatures #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
module Control.Monad.Freer.Par.Funable (
-- ** Funable
Funable(..),
-- ** Taggable
Taggable(..), Tag(..), sameTag, Id ) where
import Control.Monad.Freer.Par.Internal.Id (Id)
---------------------------------------------------------------------------
class Funable f where
fun :: (a -> m b) -> f m a b
($$) :: Applicative m => f m a b -> a -> m b
class Taggable (t :: (* -> *) -> * -> * -> *) where
getTag :: t m a b -> Tag; putTag :: t m a b -> Id -> t m a b
data Tag = NoTag | Tag Id deriving Show
sameTag :: Tag -> Tag -> Bool
l `sameTag` r | Tag i <- l, Tag j <- r = i == j | otherwise = False