{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Control.Monad.Freer.Par.TaggableFunction (
	-- * TaggableFun
	TaggableFun ) where

import Control.Monad.Freer.Par.Funable (Funable(..), Taggable(..), Tag(..))

---------------------------------------------------------------------------

data TaggableFun m a b = Fun { forall (m :: * -> *) a b. TaggableFun m a b -> Tag
tag :: Tag, forall (m :: * -> *) a b. TaggableFun m a b -> a -> m b
unFun :: a -> m b }

instance Funable TaggableFun where fun :: forall a (m :: * -> *) b. (a -> m b) -> TaggableFun m a b
fun = forall (m :: * -> *) a b. Tag -> (a -> m b) -> TaggableFun m a b
Fun Tag
NoTag; $$ :: forall (m :: * -> *) a b.
Applicative m =>
TaggableFun m a b -> a -> m b
($$) = forall (m :: * -> *) a b. TaggableFun m a b -> a -> m b
unFun
instance Taggable TaggableFun where putTag :: forall (m :: * -> *) a b.
TaggableFun m a b -> Id -> TaggableFun m a b
putTag TaggableFun m a b
f Id
i = TaggableFun m a b
f { tag :: Tag
tag = Id -> Tag
Tag Id
i }; getTag :: forall (m :: * -> *) a b. TaggableFun m a b -> Tag
getTag = forall (m :: * -> *) a b. TaggableFun m a b -> Tag
tag