module Ident (Ident(..)) where import Control.Applicative import Control.Monad newtype Ident a = Ident { runIdent :: a } instance Functor Ident where fmap fn m = Ident (fn (runIdent m)) instance Applicative Ident where pure = return (<*>) = ap instance Monad Ident where return = Ident (>>=) m fn = fn (runIdent m)