module Data.Pass.Class
  ( Passable(..)
  ) where

import Data.Binary
import Data.Monoid
import Data.Typeable
import Data.Pass.Type
import Data.Pass.Eval
import Data.Pass.Fun
import Data.Pass.Thrist
import Data.Pass.Trans

class Passable t where
  pass :: (Eval k, Typeable b, Binary b, Monoid b) => t k a b -> Pass k a b

instance Passable Fun where
  pass (Fun k) = trans k

instance Passable Thrist where
  pass = Pass id

instance Passable Pass where
  pass = id