#include "free-common.h" #ifdef LIFTED_FUNCTOR_CLASSES module Data.Functor.Classes.Compat ( mappend, module Data.Functor.Classes, ) where import Data.Functor.Classes #if !(MIN_VERSION_base(4,8,0)) import Data.Monoid (mappend) #endif #else {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} module Data.Functor.Classes.Compat ( Lift1 (..), on, module Data.Functor.Classes, ) where ------------------------------------------------------------------------------- -- transformers-0.4 helpers, copied from prelude-extras ------------------------------------------------------------------------------- # if !(MIN_VERSION_base(4,8,0)) import Data.Foldable import Data.Traversable # endif import Data.Functor.Classes import Data.Function (on) -- If Show1 and Read1 are ever derived by the same mechanism as -- Show and Read, rather than GND, that will change their behavior -- here. newtype Lift1 f a = Lift1 { lower1 :: f a } deriving (Functor, Foldable, Traversable, Eq1, Ord1, Show1, Read1) instance (Eq1 f, Eq a) => Eq (Lift1 f a) where (==) = eq1 instance (Ord1 f, Ord a) => Ord (Lift1 f a) where compare = compare1 instance (Show1 f, Show a) => Show (Lift1 f a) where showsPrec = showsPrec1 instance (Read1 f, Read a) => Read (Lift1 f a) where readsPrec = readsPrec1 #endif