packages feed

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