transformers-compat-0.6.2: A small compatibility shim for the transformers library

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 | Haskell98

Data.Functor.Classes.Generic

Contents

- Options
- `Eq1`
- `Ord1`
- `Read1`
- `Show1`
- Example

Description

Functions to generically derive `Eq1`, `Ord1`, `Read1`, and `Show1` instances from Data.Functor.Classes.

Synopsis

- newtype Options = Options {
  - ghc8ShowBehavior :: Bool
  }
- 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

# Options

newtype Options #

Options that further configure how the functions in Data.Functor.Classes.Generic should behave.

Constructors

Options |
Fields ghc8ShowBehavior :: Bool If `True`, a default `Show1` implementation will show hash signs (`#`) when showing unlifted types.

defaultOptions :: Options #

Options that match the behavior of the installed version of GHC.

latestGHCOptions :: Options #

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 #

A sensible default `liftEq` implementation for `Generic1` instances.

liftEqOptions :: (GEq1 NonV4 (Rep1 f), Generic1 f) => Options -> (a -> b -> Bool) -> f a -> f b -> Bool #

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 #

A sensible default `liftCompare` implementation for `Generic1` instances.

liftCompareOptions :: (GOrd1 NonV4 (Rep1 f), Generic1 f) => Options -> (a -> b -> Ordering) -> f a -> f b -> Ordering #

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) #

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) #

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 #

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 #

Like `liftShowsPrecDefault`, but with configurable `Options`.

# Example

Note that this module exports different functions depending on which version of `transformers` this library is built against. Here is an example of how to use this module correctly:

    {-# LANGUAGE DeriveGeneric #-}

    import Data.Functor.Classes
    import Data.Functor.Classes.Generic
    import GHC.Generics

    data Pair a = Pair a a deriving Generic1

    instance Eq1 Pair where
    #if MIN_VERSION_transformers(0,4,0) && !(MIN_VERSION_transformers(0,5,0))
        eq1 = eq1Default
    #else
        liftEq = liftEqDefault
    #endif

    instance Ord1 Pair where
    #if MIN_VERSION_transformers(0,4,0) && !(MIN_VERSION_transformers(0,5,0))
        compare1 = compare1Default
    #else
        liftCompare = liftCompareDefault
    #endif

    instance Read1 Pair where
    #if MIN_VERSION_transformers(0,4,0) && !(MIN_VERSION_transformers(0,5,0))
        readsPrec1 = readsPrec1Default
    #else
        liftReadsPrec = liftReadsPrecDefault
    #endif

    instance Show1 Pair where
    #if MIN_VERSION_transformers(0,4,0) && !(MIN_VERSION_transformers(0,5,0))
        showsPrec1 = showsPrec1Default
    #else
        liftShowsPrec = liftShowsPrecDefault
    #endif