Data.Functor.Classes

Data.Functor.Classes

Copyright (c) Ross Paterson 2013
License BSD-style (see the file LICENSE)
Maintainer libraries@haskell.org
Stability experimental
Portability portable
Safe Haskell Safe
Language Haskell2010

Description

Liftings of the Prelude classes Eq, Ord, Read and Show to unary and binary type constructors.

These classes are needed to express the constraints on arguments of transformers in portable Haskell. Thus for a new transformer T, one might write instances like

instance (Eq1 f) => Eq1 (T f) where ...
instance (Ord1 f) => Ord1 (T f) where ...
instance (Read1 f) => Read1 (T f) where ...
instance (Show1 f) => Show1 (T f) where ...

If these instances can be defined, defining instances of the base classes is mechanical:

instance (Eq1 f, Eq a) => Eq (T f a) where (==) = eq1
instance (Ord1 f, Ord a) => Ord (T f a) where compare = compare1
instance (Read1 f, Read a) => Read (T f a) where readsPrec = readsPrec1
instance (Show1 f, Show a) => Show (T f a) where showsPrec = showsPrec1

Since: 4.9.0.0

Liftings of Prelude classes

For unary constructors

class Eq1 f where Source

Lifting of the Eq class to unary type constructors.

Minimal complete definition

liftEq

Methods

liftEq :: (a -> b -> Bool) -> f a -> f b -> Bool Source

Lift an equality test through the type constructor.

The function will usually be applied to an equality function, but the more general type ensures that the implementation uses it to compare elements of the first container with elements of the second.

Instances

Eq1 []

Methods

liftEq :: (a -> b -> Bool) -> [a] -> [b] -> Bool Source

Eq1 Maybe

Methods

liftEq :: (a -> b -> Bool) -> Maybe a -> Maybe b -> Bool Source

Eq1 Identity

Methods

liftEq :: (a -> b -> Bool) -> Identity a -> Identity b -> Bool Source

Eq a => Eq1 (Either a)

Methods

liftEq :: (a -> b -> Bool) -> Either a a -> Either a b -> Bool Source

Eq a => Eq1 ((,) a)

Methods

liftEq :: (a -> b -> Bool) -> (a, a) -> (a, b) -> Bool Source

Eq1 (Proxy *)

Since: 4.9.0.0

Methods

liftEq :: (a -> b -> Bool) -> Proxy * a -> Proxy * b -> Bool Source

Eq a => Eq1 (Const * a)

Methods

liftEq :: (a -> b -> Bool) -> Const * a a -> Const * a b -> Bool Source

(Eq1 f, Eq1 g) => Eq1 (Product * f g)

Methods

liftEq :: (a -> b -> Bool) -> Product * f g a -> Product * f g b -> Bool Source

(Eq1 f, Eq1 g) => Eq1 (Sum * f g)

Methods

liftEq :: (a -> b -> Bool) -> Sum * f g a -> Sum * f g b -> Bool Source

(Eq1 f, Eq1 g) => Eq1 (Compose * * f g)

Methods

liftEq :: (a -> b -> Bool) -> Compose * * f g a -> Compose * * f g b -> Bool Source

eq1 :: (Eq1 f, Eq a) => f a -> f a -> Bool Source

Lift the standard (==) function through the type constructor.

class Eq1 f => Ord1 f where Source

Lifting of the Ord class to unary type constructors.

Minimal complete definition

liftCompare

Methods

liftCompare :: (a -> b -> Ordering) -> f a -> f b -> Ordering Source

Lift a compare function through the type constructor.

The function will usually be applied to a comparison function, but the more general type ensures that the implementation uses it to compare elements of the first container with elements of the second.

Instances

Ord1 []

Methods

liftCompare :: (a -> b -> Ordering) -> [a] -> [b] -> Ordering Source

Ord1 Maybe

Methods

liftCompare :: (a -> b -> Ordering) -> Maybe a -> Maybe b -> Ordering Source

Ord1 Identity

Methods

liftCompare :: (a -> b -> Ordering) -> Identity a -> Identity b -> Ordering Source

Ord a => Ord1 (Either a)

Methods

liftCompare :: (a -> b -> Ordering) -> Either a a -> Either a b -> Ordering Source

Ord a => Ord1 ((,) a)

Methods

liftCompare :: (a -> b -> Ordering) -> (a, a) -> (a, b) -> Ordering Source

Ord1 (Proxy *)

Since: 4.9.0.0

Methods

liftCompare :: (a -> b -> Ordering) -> Proxy * a -> Proxy * b -> Ordering Source

Ord a => Ord1 (Const * a)

Methods

liftCompare :: (a -> b -> Ordering) -> Const * a a -> Const * a b -> Ordering Source

(Ord1 f, Ord1 g) => Ord1 (Product * f g)

Methods

liftCompare :: (a -> b -> Ordering) -> Product * f g a -> Product * f g b -> Ordering Source

(Ord1 f, Ord1 g) => Ord1 (Sum * f g)

Methods

liftCompare :: (a -> b -> Ordering) -> Sum * f g a -> Sum * f g b -> Ordering Source

(Ord1 f, Ord1 g) => Ord1 (Compose * * f g)

Methods

liftCompare :: (a -> b -> Ordering) -> Compose * * f g a -> Compose * * f g b -> Ordering Source

compare1 :: (Ord1 f, Ord a) => f a -> f a -> Ordering Source

Lift the standard compare function through the type constructor.

class Read1 f where Source

Lifting of the Read class to unary type constructors.

Minimal complete definition

liftReadsPrec

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (f a) Source

readsPrec function for an application of the type constructor based on readsPrec and readList functions for the argument type.

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [f a] Source

readList function for an application of the type constructor based on readsPrec and readList functions for the argument type. The default implementation using standard list syntax is correct for most types.

Instances

Read1 []

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS [a] Source

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [[a]] Source

Read1 Maybe

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Maybe a) Source

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Maybe a] Source

Read1 Identity

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Identity a) Source

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Identity a] Source

Read a => Read1 (Either a)

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Either a a) Source

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Either a a] Source

Read a => Read1 ((,) a)

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (a, a) Source

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [(a, a)] Source

Read1 (Proxy *)

Since: 4.9.0.0

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Proxy * a) Source

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Proxy * a] Source

Read a => Read1 (Const * a)

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Const * a a) Source

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Const * a a] Source

(Read1 f, Read1 g) => Read1 (Product * f g)

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Product * f g a) Source

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Product * f g a] Source

(Read1 f, Read1 g) => Read1 (Sum * f g)

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Sum * f g a) Source

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Sum * f g a] Source

(Read1 f, Read1 g) => Read1 (Compose * * f g)

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Compose * * f g a) Source

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Compose * * f g a] Source

readsPrec1 :: (Read1 f, Read a) => Int -> ReadS (f a) Source

Lift the standard readsPrec and readList functions through the type constructor.

class Show1 f where Source

Lifting of the Show class to unary type constructors.

Minimal complete definition

liftShowsPrec

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> f a -> ShowS Source

showsPrec function for an application of the type constructor based on showsPrec and showList functions for the argument type.

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [f a] -> ShowS Source

showList function for an application of the type constructor based on showsPrec and showList functions for the argument type. The default implementation using standard list syntax is correct for most types.

Instances

Show1 []

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> [a] -> ShowS Source

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [[a]] -> ShowS Source

Show1 Maybe

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Maybe a -> ShowS Source

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Maybe a] -> ShowS Source

Show1 Identity

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Identity a -> ShowS Source

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Identity a] -> ShowS Source

Show a => Show1 (Either a)

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Either a a -> ShowS Source

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Either a a] -> ShowS Source

Show a => Show1 ((,) a)

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> (a, a) -> ShowS Source

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [(a, a)] -> ShowS Source

Show1 (Proxy *)

Since: 4.9.0.0

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Proxy * a -> ShowS Source

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Proxy * a] -> ShowS Source

Show a => Show1 (Const * a)

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Const * a a -> ShowS Source

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Const * a a] -> ShowS Source

(Show1 f, Show1 g) => Show1 (Product * f g)

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Product * f g a -> ShowS Source

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Product * f g a] -> ShowS Source

(Show1 f, Show1 g) => Show1 (Sum * f g)

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Sum * f g a -> ShowS Source

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Sum * f g a] -> ShowS Source

(Show1 f, Show1 g) => Show1 (Compose * * f g)

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Compose * * f g a -> ShowS Source

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Compose * * f g a] -> ShowS Source

showsPrec1 :: (Show1 f, Show a) => Int -> f a -> ShowS Source

Lift the standard showsPrec and showList functions through the type constructor.

For binary constructors

class Eq2 f where Source

Lifting of the Eq class to binary type constructors.

Minimal complete definition

liftEq2

Methods

liftEq2 :: (a -> b -> Bool) -> (c -> d -> Bool) -> f a c -> f b d -> Bool Source

Lift equality tests through the type constructor.

The function will usually be applied to equality functions, but the more general type ensures that the implementation uses them to compare elements of the first container with elements of the second.

Instances

Eq2 Either

Methods

liftEq2 :: (a -> b -> Bool) -> (c -> d -> Bool) -> Either a c -> Either b d -> Bool Source

Eq2 (,)

Methods

liftEq2 :: (a -> b -> Bool) -> (c -> d -> Bool) -> (a, c) -> (b, d) -> Bool Source

Eq2 (Const *)

Methods

liftEq2 :: (a -> b -> Bool) -> (c -> d -> Bool) -> Const * a c -> Const * b d -> Bool Source

eq2 :: (Eq2 f, Eq a, Eq b) => f a b -> f a b -> Bool Source

Lift the standard (==) function through the type constructor.

class Eq2 f => Ord2 f where Source

Lifting of the Ord class to binary type constructors.

Minimal complete definition

liftCompare2

Methods

liftCompare2 :: (a -> b -> Ordering) -> (c -> d -> Ordering) -> f a c -> f b d -> Ordering Source

Lift compare functions through the type constructor.

The function will usually be applied to comparison functions, but the more general type ensures that the implementation uses them to compare elements of the first container with elements of the second.

Instances

Ord2 Either

Methods

liftCompare2 :: (a -> b -> Ordering) -> (c -> d -> Ordering) -> Either a c -> Either b d -> Ordering Source

Ord2 (,)

Methods

liftCompare2 :: (a -> b -> Ordering) -> (c -> d -> Ordering) -> (a, c) -> (b, d) -> Ordering Source

Ord2 (Const *)

Methods

liftCompare2 :: (a -> b -> Ordering) -> (c -> d -> Ordering) -> Const * a c -> Const * b d -> Ordering Source

compare2 :: (Ord2 f, Ord a, Ord b) => f a b -> f a b -> Ordering Source

Lift the standard compare function through the type constructor.

class Read2 f where Source

Lifting of the Read class to binary type constructors.

Minimal complete definition

liftReadsPrec2

Methods

liftReadsPrec2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> Int -> ReadS (f a b) Source

readsPrec function for an application of the type constructor based on readsPrec and readList functions for the argument types.

liftReadList2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> ReadS [f a b] Source

readList function for an application of the type constructor based on readsPrec and readList functions for the argument types. The default implementation using standard list syntax is correct for most types.

Instances

Read2 Either

Methods

liftReadsPrec2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> Int -> ReadS (Either a b) Source

liftReadList2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> ReadS [Either a b] Source

Read2 (,)

Methods

liftReadsPrec2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> Int -> ReadS (a, b) Source

liftReadList2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> ReadS [(a, b)] Source

Read2 (Const *)

Methods

liftReadsPrec2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> Int -> ReadS (Const * a b) Source

liftReadList2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> ReadS [Const * a b] Source

readsPrec2 :: (Read2 f, Read a, Read b) => Int -> ReadS (f a b) Source

Lift the standard readsPrec function through the type constructor.

class Show2 f where Source

Lifting of the Show class to binary type constructors.

Minimal complete definition

liftShowsPrec2

Methods

liftShowsPrec2 :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> (Int -> b -> ShowS) -> ([b] -> ShowS) -> Int -> f a b -> ShowS Source

showsPrec function for an application of the type constructor based on showsPrec and showList functions for the argument types.

liftShowList2 :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> (Int -> b -> ShowS) -> ([b] -> ShowS) -> [f a b] -> ShowS Source

showList function for an application of the type constructor based on showsPrec and showList functions for the argument types. The default implementation using standard list syntax is correct for most types.

Instances

Show2 Either

Methods

liftShowsPrec2 :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> (Int -> b -> ShowS) -> ([b] -> ShowS) -> Int -> Either a b -> ShowS Source

liftShowList2 :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> (Int -> b -> ShowS) -> ([b] -> ShowS) -> [Either a b] -> ShowS Source

Show2 (,)

Methods

liftShowsPrec2 :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> (Int -> b -> ShowS) -> ([b] -> ShowS) -> Int -> (a, b) -> ShowS Source

liftShowList2 :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> (Int -> b -> ShowS) -> ([b] -> ShowS) -> [(a, b)] -> ShowS Source

Show2 (Const *)

Methods

liftShowsPrec2 :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> (Int -> b -> ShowS) -> ([b] -> ShowS) -> Int -> Const * a b -> ShowS Source

liftShowList2 :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> (Int -> b -> ShowS) -> ([b] -> ShowS) -> [Const * a b] -> ShowS Source

showsPrec2 :: (Show2 f, Show a, Show b) => Int -> f a b -> ShowS Source

Lift the standard showsPrec function through the type constructor.

Helper functions

These functions can be used to assemble Read and Show instances for new algebraic types. For example, given the definition

data T f a = Zero a | One (f a) | Two a (f a)

a standard Read1 instance may be defined as

instance (Read1 f) => Read1 (T f) where
    liftReadsPrec rp rl = readsData $
        readsUnaryWith rp "Zero" Zero `mappend`
        readsUnaryWith (liftReadsPrec rp rl) "One" One `mappend`
        readsBinaryWith rp (liftReadsPrec rp rl) "Two" Two

and the corresponding Show1 instance as

instance (Show1 f) => Show1 (T f) where
    liftShowsPrec sp _ d (Zero x) =
        showsUnaryWith sp "Zero" d x
    liftShowsPrec sp sl d (One x) =
        showsUnaryWith (liftShowsPrec sp sl) "One" d x
    liftShowsPrec sp sl d (Two x y) =
        showsBinaryWith sp (liftShowsPrec sp sl) "Two" d x y

readsData :: (String -> ReadS a) -> Int -> ReadS a Source

readsData p d is a parser for datatypes where each alternative begins with a data constructor. It parses the constructor and passes it to p. Parsers for various constructors can be constructed with readsUnary, readsUnary1 and readsBinary1, and combined with mappend from the Monoid class.

readsUnaryWith :: (Int -> ReadS a) -> String -> (a -> t) -> String -> ReadS t Source

readsUnaryWith rp n c n' matches the name of a unary data constructor and then parses its argument using rp.

readsBinaryWith :: (Int -> ReadS a) -> (Int -> ReadS b) -> String -> (a -> b -> t) -> String -> ReadS t Source

readsBinaryWith rp1 rp2 n c n' matches the name of a binary data constructor and then parses its arguments using rp1 and rp2 respectively.

showsUnaryWith :: (Int -> a -> ShowS) -> String -> Int -> a -> ShowS Source

showsUnaryWith sp n d x produces the string representation of a unary data constructor with name n and argument x, in precedence context d.

showsBinaryWith :: (Int -> a -> ShowS) -> (Int -> b -> ShowS) -> String -> Int -> a -> b -> ShowS Source

showsBinaryWith sp1 sp2 n d x y produces the string representation of a binary data constructor with name n and arguments x and y, in precedence context d.

Obsolete helpers

readsUnary :: Read a => String -> (a -> t) -> String -> ReadS t Source

Deprecated: Use readsUnaryWith to define liftReadsPrec

readsUnary n c n' matches the name of a unary data constructor and then parses its argument using readsPrec.

readsUnary1 :: (Read1 f, Read a) => String -> (f a -> t) -> String -> ReadS t Source

Deprecated: Use readsUnaryWith to define liftReadsPrec

readsUnary1 n c n' matches the name of a unary data constructor and then parses its argument using readsPrec1.

readsBinary1 :: (Read1 f, Read1 g, Read a) => String -> (f a -> g a -> t) -> String -> ReadS t Source

Deprecated: Use readsBinaryWith to define liftReadsPrec

readsBinary1 n c n' matches the name of a binary data constructor and then parses its arguments using readsPrec1.

showsUnary :: Show a => String -> Int -> a -> ShowS Source

Deprecated: Use showsUnaryWith to define liftShowsPrec

showsUnary n d x produces the string representation of a unary data constructor with name n and argument x, in precedence context d.

showsUnary1 :: (Show1 f, Show a) => String -> Int -> f a -> ShowS Source

Deprecated: Use showsUnaryWith to define liftShowsPrec

showsUnary1 n d x produces the string representation of a unary data constructor with name n and argument x, in precedence context d.

showsBinary1 :: (Show1 f, Show1 g, Show a) => String -> Int -> f a -> g a -> ShowS Source

Deprecated: Use showsBinaryWith to define liftShowsPrec

showsBinary1 n d x y produces the string representation of a binary data constructor with name n and arguments x and y, in precedence context d.

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.0.1/docs/html/libraries/base-4.9.0.0/Data-Functor-Classes.html

在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号

意见反馈
返回顶部