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 x => Applicative (Constant x) where pure :: a -> Constant x a pure = Constant -- (<*>) :: Monoid a => Constant a (a1 -> b) -> Constant a a1 -> Constant a b -- (<*>) = _