newtype Constant a b = Constant { getConstant :: a } deriving (Eq, Ord, Show) instance Functor (Constant a) where fmap :: (c -> d) -> Constant a c -> Constant a d fmap _ c = Constant (getConstant c) instance Monoid a => Applicative (Constant a) where pure :: a -> Constant a a pure = Constant