{-# LANGUAGE TemplateHaskell #-}

module MonadLab.Identity (
   identityMonad
 ) where

import Prelude hiding (Monad)
import Language.Haskell.TH
import MonadLab.CommonTypes

identityMonad :: Monad
identityMonad = (identityTypeCon , identityReturn , identityBind, [], identityBaseLift)

identityTypeCon :: MonadTypeCon
identityTypeCon = \t -> t 

identityReturn :: ReturnExpQ
identityReturn = [| \v -> v |]

identityBind :: BindExpQ
identityBind = [| \m -> \f -> f m |]

identityBaseLift :: LiftExpQ
identityBaseLift = [| id |]