Copyright | (C) 2015-2016 Edward Kmett Ryan Scott |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Ryan Scott |
Stability | Provisional |
Portability | GHC |
Safe Haskell | None |
Language | Haskell2010 |
Functions to generically derive Eq1
, Ord1
, Read1
, and Show1
instances from Data.Functor.Classes.
Synopsis
- newtype Options = Options {}
- defaultOptions :: Options
- latestGHCOptions :: Options
- liftEqDefault :: (GEq1 NonV4 (Rep1 f), Generic1 f) => (a -> b -> Bool) -> f a -> f b -> Bool
- liftEqOptions :: (GEq1 NonV4 (Rep1 f), Generic1 f) => Options -> (a -> b -> Bool) -> f a -> f b -> Bool
- liftCompareDefault :: (GOrd1 NonV4 (Rep1 f), Generic1 f) => (a -> b -> Ordering) -> f a -> f b -> Ordering
- liftCompareOptions :: (GOrd1 NonV4 (Rep1 f), Generic1 f) => Options -> (a -> b -> Ordering) -> f a -> f b -> Ordering
- liftReadsPrecDefault :: (GRead1 NonV4 (Rep1 f), Generic1 f) => (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (f a)
- liftReadsPrecOptions :: (GRead1 NonV4 (Rep1 f), Generic1 f) => Options -> (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (f a)
- liftShowsPrecDefault :: (GShow1 NonV4 (Rep1 f), Generic1 f) => (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> f a -> ShowS
- liftShowsPrecOptions :: (GShow1 NonV4 (Rep1 f), Generic1 f) => Options -> (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> f a -> ShowS
- newtype FunctorClassesDefault (f :: Type -> Type) a = FunctorClassesDefault {
- getFunctorClassesDefault :: f a
Options
Options that further configure how the functions in Data.Functor.Classes.Generic should behave.
defaultOptions :: Options Source #
Options that match the behavior of the installed version of GHC.
latestGHCOptions :: Options Source #
Options that match the behavior of the most recent GHC release.
Eq1
liftEqDefault :: (GEq1 NonV4 (Rep1 f), Generic1 f) => (a -> b -> Bool) -> f a -> f b -> Bool Source #
liftEqOptions :: (GEq1 NonV4 (Rep1 f), Generic1 f) => Options -> (a -> b -> Bool) -> f a -> f b -> Bool Source #
Like liftEqDefault
, but with configurable Options
. Currently,
the Options
have no effect (but this may change in the future).
Ord1
liftCompareDefault :: (GOrd1 NonV4 (Rep1 f), Generic1 f) => (a -> b -> Ordering) -> f a -> f b -> Ordering Source #
A sensible default liftCompare
implementation for Generic1
instances.
liftCompareOptions :: (GOrd1 NonV4 (Rep1 f), Generic1 f) => Options -> (a -> b -> Ordering) -> f a -> f b -> Ordering Source #
Like liftCompareDefault
, but with configurable Options
. Currently,
the Options
have no effect (but this may change in the future).
Read1
liftReadsPrecDefault :: (GRead1 NonV4 (Rep1 f), Generic1 f) => (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (f a) Source #
A sensible default liftReadsPrec
implementation for Generic1
instances.
liftReadsPrecOptions :: (GRead1 NonV4 (Rep1 f), Generic1 f) => Options -> (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (f a) Source #
Like liftReadsPrecDefault
, but with configurable Options
. Currently,
the Options
have no effect (but this may change in the future).
Show1
liftShowsPrecDefault :: (GShow1 NonV4 (Rep1 f), Generic1 f) => (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> f a -> ShowS Source #
A sensible default liftShowsPrec
implementation for Generic1
instances.
liftShowsPrecOptions :: (GShow1 NonV4 (Rep1 f), Generic1 f) => Options -> (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> f a -> ShowS Source #
Like liftShowsPrecDefault
, but with configurable Options
.
GenericFunctorClasses
newtype FunctorClassesDefault (f :: Type -> Type) a Source #
An adapter newtype, suitable for DerivingVia
. Its Eq1
, Ord1
,
Read1
, and Show1
instances leverage Generic1
-based defaults.
Instances
Example
The most straightforward way to use the defaults in this module is to use
DerivingVia
on GHC 8.6 or later. For example:
{-# LANGUAGE DeriveGeneric, DerivingVia #-} import Data.Functor.Classes import Data.Functor.Classes.Generic import GHC.Generics data Pair a = Pair a a deriving stock Generic1 deriving (Eq1, Ord1, Read1, Show1) via FunctorClassesDefault Pair
If using an older version of GHC, then one can also define instances manually.
This is slightly trickier to accomplish since this module exports different
functions depending on which version of transformers
this library is built
against. Here is an example of how to define instances manually:
{-# LANGUAGE CPP, DeriveGeneric #-} import Data.Functor.Classes import Data.Functor.Classes.Generic import GHC.Generics data Pair a = Pair a a deriving Generic1 instanceEq1
Pair where #if MIN_VERSION_transformers(0,4,0) && !(MIN_VERSION_transformers(0,5,0))eq1
=eq1Default
#elseliftEq
=liftEqDefault
#endif instanceOrd1
Pair where #if MIN_VERSION_transformers(0,4,0) && !(MIN_VERSION_transformers(0,5,0))compare1
=compare1Default
#elseliftCompare
=liftCompareDefault
#endif instanceRead1
Pair where #if MIN_VERSION_transformers(0,4,0) && !(MIN_VERSION_transformers(0,5,0))readsPrec1
=readsPrec1Default
#elseliftReadsPrec
=liftReadsPrecDefault
#endif instanceShow1
Pair where #if MIN_VERSION_transformers(0,4,0) && !(MIN_VERSION_transformers(0,5,0))showsPrec1
=showsPrec1Default
#elseliftShowsPrec
=liftShowsPrecDefault
#endif