(original) (raw)

{-# LANGUAGE Safe #-}

module Data.Functor.Classes (

[Eq1](Data.Functor.Classes.html#Eq1)(..), [eq1](Data.Functor.Classes.html#eq1),
[Ord1](Data.Functor.Classes.html#Ord1)(..), [compare1](Data.Functor.Classes.html#compare1),
[Read1](Data.Functor.Classes.html#Read1)(..), [readsPrec1](Data.Functor.Classes.html#readsPrec1), [readPrec1](Data.Functor.Classes.html#readPrec1),
[liftReadListDefault](Data.Functor.Classes.html#liftReadListDefault), [liftReadListPrecDefault](Data.Functor.Classes.html#liftReadListPrecDefault),
[Show1](Data.Functor.Classes.html#Show1)(..), [showsPrec1](Data.Functor.Classes.html#showsPrec1),

[Eq2](Data.Functor.Classes.html#Eq2)(..), [eq2](Data.Functor.Classes.html#eq2),
[Ord2](Data.Functor.Classes.html#Ord2)(..), [compare2](Data.Functor.Classes.html#compare2),
[Read2](Data.Functor.Classes.html#Read2)(..), [readsPrec2](Data.Functor.Classes.html#readsPrec2), [readPrec2](Data.Functor.Classes.html#readPrec2),
[liftReadList2Default](Data.Functor.Classes.html#liftReadList2Default), [liftReadListPrec2Default](Data.Functor.Classes.html#liftReadListPrec2Default),
[Show2](Data.Functor.Classes.html#Show2)(..), [showsPrec2](Data.Functor.Classes.html#showsPrec2),


[readsData](Data.Functor.Classes.html#readsData), [readData](Data.Functor.Classes.html#readData),
[readsUnaryWith](Data.Functor.Classes.html#readsUnaryWith), [readUnaryWith](Data.Functor.Classes.html#readUnaryWith),
[readsBinaryWith](Data.Functor.Classes.html#readsBinaryWith), [readBinaryWith](Data.Functor.Classes.html#readBinaryWith),
[showsUnaryWith](Data.Functor.Classes.html#showsUnaryWith),
[showsBinaryWith](Data.Functor.Classes.html#showsBinaryWith),

[readsUnary](Data.Functor.Classes.html#readsUnary),
[readsUnary1](Data.Functor.Classes.html#readsUnary1),
[readsBinary1](Data.Functor.Classes.html#readsBinary1),
[showsUnary](Data.Functor.Classes.html#showsUnary),
[showsUnary1](Data.Functor.Classes.html#showsUnary1),
[showsBinary1](Data.Functor.Classes.html#showsBinary1),

) where

import Control.Applicative (Alternative((<|>)), Const(Const))

import Data.Functor.Identity (Identity(Identity)) import Data.Proxy (Proxy(Proxy)) import Data.List.NonEmpty (NonEmpty(..)) import Data.Monoid (mappend) import Data.Ord (Down(Down))

import GHC.Read (expectP, list, paren)

import Text.ParserCombinators.ReadPrec (ReadPrec, readPrec_to_S, readS_to_Prec) import Text.Read (Read(..), parens, prec, step) import Text.Read.Lex (Lexeme(..)) import Text.Show (showListWith)

class Eq1 f where

[liftEq](Data.Functor.Classes.html#liftEq) :: ([a](#local-6989586621679421213) -> [b](#local-6989586621679421214) -> Bool) -> [f](#local-6989586621679421212) [a](#local-6989586621679421213) -> [f](#local-6989586621679421212) [b](#local-6989586621679421214) -> Bool

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

class (Eq1 f) => Ord1 f where

[liftCompare](Data.Functor.Classes.html#liftCompare) :: ([a](#local-6989586621679421210) -> [b](#local-6989586621679421211) -> Ordering) -> [f](#local-6989586621679421209) [a](#local-6989586621679421210) -> [f](#local-6989586621679421209) [b](#local-6989586621679421211) -> Ordering

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

class Read1 f where {-# MINIMAL liftReadsPrec | liftReadPrec #-}

[liftReadsPrec](Data.Functor.Classes.html#liftReadsPrec) :: (Int -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [a](#local-6989586621679421197)) -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [[a](#local-6989586621679421197)] -> Int -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) ([f](#local-6989586621679421196) [a](#local-6989586621679421197))
[liftReadsPrec](Data.Functor.Classes.html#liftReadsPrec) [rp](#local-6989586621679421201) [rl](#local-6989586621679421202) = [readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [$](GHC.Base.html#%24)
    [liftReadPrec](Data.Functor.Classes.html#liftReadPrec) ([readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) [rp](#local-6989586621679421201)) ([readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) ([const](GHC.Base.html#const) [rl](#local-6989586621679421202)))


[liftReadList](Data.Functor.Classes.html#liftReadList) :: (Int -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [a](#local-6989586621679421198)) -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [[a](#local-6989586621679421198)] -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [[f](#local-6989586621679421196) [a](#local-6989586621679421198)]
[liftReadList](Data.Functor.Classes.html#liftReadList) [rp](#local-6989586621679421203) [rl](#local-6989586621679421204) = [readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS)
    ([list](GHC.Read.html#list) [$](GHC.Base.html#%24) [liftReadPrec](Data.Functor.Classes.html#liftReadPrec) ([readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) [rp](#local-6989586621679421203)) ([readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) ([const](GHC.Base.html#const) [rl](#local-6989586621679421204)))) 0


[liftReadPrec](Data.Functor.Classes.html#liftReadPrec) :: [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [a](#local-6989586621679421199) -> [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [[a](#local-6989586621679421199)] -> [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) ([f](#local-6989586621679421196) [a](#local-6989586621679421199))
[liftReadPrec](Data.Functor.Classes.html#liftReadPrec) [rp](#local-6989586621679421205) [rl](#local-6989586621679421206) = [readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) [$](GHC.Base.html#%24)
    [liftReadsPrec](Data.Functor.Classes.html#liftReadsPrec) ([readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [rp](#local-6989586621679421205)) ([readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [rl](#local-6989586621679421206) 0)


[liftReadListPrec](Data.Functor.Classes.html#liftReadListPrec) :: [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [a](#local-6989586621679421200) -> [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [[a](#local-6989586621679421200)] -> [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [[f](#local-6989586621679421196) [a](#local-6989586621679421200)]
[liftReadListPrec](Data.Functor.Classes.html#liftReadListPrec) [rp](#local-6989586621679421207) [rl](#local-6989586621679421208) = [readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) [$](GHC.Base.html#%24) \_ ->
    [liftReadList](Data.Functor.Classes.html#liftReadList) ([readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [rp](#local-6989586621679421207)) ([readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [rl](#local-6989586621679421208) 0)

readsPrec1 :: (Read1 f, Read a) => Int -> ReadS (f a) readsPrec1 = liftReadsPrec readsPrec readList

readPrec1 :: (Read1 f, Read a) => ReadPrec (f a) readPrec1 = liftReadPrec readPrec readListPrec

liftReadListDefault :: Read1 f => (Int -> ReadS a) -> ReadS [a] -> ReadS [f a] liftReadListDefault rp rl = readPrec_to_S (liftReadListPrec (readS_to_Prec rp) (readS_to_Prec (const rl))) 0

liftReadListPrecDefault :: Read1 f => ReadPrec a -> ReadPrec [a] -> ReadPrec [f a] liftReadListPrecDefault rp rl = list (liftReadPrec rp rl)

class Show1 f where

[liftShowsPrec](Data.Functor.Classes.html#liftShowsPrec) :: (Int -> [a](#local-6989586621679421192) -> [ShowS](GHC.Show.html#ShowS)) -> ([[a](#local-6989586621679421192)] -> [ShowS](GHC.Show.html#ShowS)) ->
    Int -> [f](#local-6989586621679421191) [a](#local-6989586621679421192) -> [ShowS](GHC.Show.html#ShowS)


[liftShowList](Data.Functor.Classes.html#liftShowList) :: (Int -> [a](#local-6989586621679421193) -> [ShowS](GHC.Show.html#ShowS)) -> ([[a](#local-6989586621679421193)] -> [ShowS](GHC.Show.html#ShowS)) ->
    [[f](#local-6989586621679421191) [a](#local-6989586621679421193)] -> [ShowS](GHC.Show.html#ShowS)
[liftShowList](Data.Functor.Classes.html#liftShowList) [sp](#local-6989586621679421194) [sl](#local-6989586621679421195) = [showListWith](Text.Show.html#showListWith) ([liftShowsPrec](Data.Functor.Classes.html#liftShowsPrec) [sp](#local-6989586621679421194) [sl](#local-6989586621679421195) 0)

showsPrec1 :: (Show1 f, Show a) => Int -> f a -> ShowS showsPrec1 = liftShowsPrec showsPrec showList

class Eq2 f where

[liftEq2](Data.Functor.Classes.html#liftEq2) :: ([a](#local-6989586621679421187) -> [b](#local-6989586621679421188) -> Bool) -> ([c](#local-6989586621679421189) -> [d](#local-6989586621679421190) -> Bool) -> [f](#local-6989586621679421186) [a](#local-6989586621679421187) [c](#local-6989586621679421189) -> [f](#local-6989586621679421186) [b](#local-6989586621679421188) [d](#local-6989586621679421190) -> Bool

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

class (Eq2 f) => Ord2 f where

[liftCompare2](Data.Functor.Classes.html#liftCompare2) :: ([a](#local-6989586621679421182) -> [b](#local-6989586621679421183) -> Ordering) -> ([c](#local-6989586621679421184) -> [d](#local-6989586621679421185) -> Ordering) ->
    [f](#local-6989586621679421181) [a](#local-6989586621679421182) [c](#local-6989586621679421184) -> [f](#local-6989586621679421181) [b](#local-6989586621679421183) [d](#local-6989586621679421185) -> Ordering

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

class Read2 f where {-# MINIMAL liftReadsPrec2 | liftReadPrec2 #-}

[liftReadsPrec2](Data.Functor.Classes.html#liftReadsPrec2) :: (Int -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [a](#local-6989586621679421157)) -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [[a](#local-6989586621679421157)] ->
    (Int -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [b](#local-6989586621679421158)) -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [[b](#local-6989586621679421158)] -> Int -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) ([f](#local-6989586621679421156) [a](#local-6989586621679421157) [b](#local-6989586621679421158))
[liftReadsPrec2](Data.Functor.Classes.html#liftReadsPrec2) [rp1](#local-6989586621679421165) [rl1](#local-6989586621679421166) [rp2](#local-6989586621679421167) [rl2](#local-6989586621679421168) = [readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [$](GHC.Base.html#%24)
    [liftReadPrec2](Data.Functor.Classes.html#liftReadPrec2) ([readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) [rp1](#local-6989586621679421165)) ([readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) ([const](GHC.Base.html#const) [rl1](#local-6989586621679421166)))
                  ([readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) [rp2](#local-6989586621679421167)) ([readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) ([const](GHC.Base.html#const) [rl2](#local-6989586621679421168)))


[liftReadList2](Data.Functor.Classes.html#liftReadList2) :: (Int -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [a](#local-6989586621679421159)) -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [[a](#local-6989586621679421159)] ->
    (Int -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [b](#local-6989586621679421160)) -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [[b](#local-6989586621679421160)] -> [ReadS](Text.ParserCombinators.ReadP.html#ReadS) [[f](#local-6989586621679421156) [a](#local-6989586621679421159) [b](#local-6989586621679421160)]
[liftReadList2](Data.Functor.Classes.html#liftReadList2) [rp1](#local-6989586621679421169) [rl1](#local-6989586621679421170) [rp2](#local-6989586621679421171) [rl2](#local-6989586621679421172) = [readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS)
   ([list](GHC.Read.html#list) [$](GHC.Base.html#%24) [liftReadPrec2](Data.Functor.Classes.html#liftReadPrec2) ([readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) [rp1](#local-6989586621679421169)) ([readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) ([const](GHC.Base.html#const) [rl1](#local-6989586621679421170)))
                         ([readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) [rp2](#local-6989586621679421171)) ([readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) ([const](GHC.Base.html#const) [rl2](#local-6989586621679421172)))) 0


[liftReadPrec2](Data.Functor.Classes.html#liftReadPrec2) :: [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [a](#local-6989586621679421161) -> [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [[a](#local-6989586621679421161)] ->
    [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [b](#local-6989586621679421162) -> [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [[b](#local-6989586621679421162)] -> [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) ([f](#local-6989586621679421156) [a](#local-6989586621679421161) [b](#local-6989586621679421162))
[liftReadPrec2](Data.Functor.Classes.html#liftReadPrec2) [rp1](#local-6989586621679421173) [rl1](#local-6989586621679421174) [rp2](#local-6989586621679421175) [rl2](#local-6989586621679421176) = [readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) [$](GHC.Base.html#%24)
    [liftReadsPrec2](Data.Functor.Classes.html#liftReadsPrec2) ([readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [rp1](#local-6989586621679421173)) ([readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [rl1](#local-6989586621679421174) 0)
                   ([readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [rp2](#local-6989586621679421175)) ([readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [rl2](#local-6989586621679421176) 0)


[liftReadListPrec2](Data.Functor.Classes.html#liftReadListPrec2) :: [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [a](#local-6989586621679421163) -> [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [[a](#local-6989586621679421163)] ->
    [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [b](#local-6989586621679421164) -> [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [[b](#local-6989586621679421164)] -> [ReadPrec](Text.ParserCombinators.ReadPrec.html#ReadPrec) [[f](#local-6989586621679421156) [a](#local-6989586621679421163) [b](#local-6989586621679421164)]
[liftReadListPrec2](Data.Functor.Classes.html#liftReadListPrec2) [rp1](#local-6989586621679421177) [rl1](#local-6989586621679421178) [rp2](#local-6989586621679421179) [rl2](#local-6989586621679421180) = [readS_to_Prec](Text.ParserCombinators.ReadPrec.html#readS%5Fto%5FPrec) [$](GHC.Base.html#%24) \_ ->
    [liftReadList2](Data.Functor.Classes.html#liftReadList2) ([readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [rp1](#local-6989586621679421177)) ([readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [rl1](#local-6989586621679421178) 0)
                  ([readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [rp2](#local-6989586621679421179)) ([readPrec_to_S](Text.ParserCombinators.ReadPrec.html#readPrec%5Fto%5FS) [rl2](#local-6989586621679421180) 0)

readsPrec2 :: (Read2 f, Read a, Read b) => Int -> ReadS (f a b) readsPrec2 = liftReadsPrec2 readsPrec readList readsPrec readList

readPrec2 :: (Read2 f, Read a, Read b) => ReadPrec (f a b) readPrec2 = liftReadPrec2 readPrec readListPrec readPrec readListPrec

liftReadList2Default :: Read2 f => (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] ->ReadS [f a b] liftReadList2Default rp1 rl1 rp2 rl2 = readPrec_to_S (liftReadListPrec2 (readS_to_Prec rp1) (readS_to_Prec (const rl1)) (readS_to_Prec rp2) (readS_to_Prec (const rl2))) 0

liftReadListPrec2Default :: Read2 f => ReadPrec a -> ReadPrec [a] -> ReadPrec b -> ReadPrec [b] -> ReadPrec [f a b] liftReadListPrec2Default rp1 rl1 rp2 rl2 = list (liftReadPrec2 rp1 rl1 rp2 rl2)

class Show2 f where

[liftShowsPrec2](Data.Functor.Classes.html#liftShowsPrec2) :: (Int -> [a](#local-6989586621679421148) -> [ShowS](GHC.Show.html#ShowS)) -> ([[a](#local-6989586621679421148)] -> [ShowS](GHC.Show.html#ShowS)) ->
    (Int -> [b](#local-6989586621679421149) -> [ShowS](GHC.Show.html#ShowS)) -> ([[b](#local-6989586621679421149)] -> [ShowS](GHC.Show.html#ShowS)) -> Int -> [f](#local-6989586621679421147) [a](#local-6989586621679421148) [b](#local-6989586621679421149) -> [ShowS](GHC.Show.html#ShowS)


[liftShowList2](Data.Functor.Classes.html#liftShowList2) :: (Int -> [a](#local-6989586621679421150) -> [ShowS](GHC.Show.html#ShowS)) -> ([[a](#local-6989586621679421150)] -> [ShowS](GHC.Show.html#ShowS)) ->
    (Int -> [b](#local-6989586621679421151) -> [ShowS](GHC.Show.html#ShowS)) -> ([[b](#local-6989586621679421151)] -> [ShowS](GHC.Show.html#ShowS)) -> [[f](#local-6989586621679421147) [a](#local-6989586621679421150) [b](#local-6989586621679421151)] -> [ShowS](GHC.Show.html#ShowS)
[liftShowList2](Data.Functor.Classes.html#liftShowList2) [sp1](#local-6989586621679421152) [sl1](#local-6989586621679421153) [sp2](#local-6989586621679421154) [sl2](#local-6989586621679421155) =
    [showListWith](Text.Show.html#showListWith) ([liftShowsPrec2](Data.Functor.Classes.html#liftShowsPrec2) [sp1](#local-6989586621679421152) [sl1](#local-6989586621679421153) [sp2](#local-6989586621679421154) [sl2](#local-6989586621679421155) 0)

showsPrec2 :: (Show2 f, Show a, Show b) => Int -> f a b -> ShowS showsPrec2 = liftShowsPrec2 showsPrec showList showsPrec showList

instance Eq1 Maybe where liftEq _ Nothing Nothing = True liftEq _ Nothing (Just _) = False liftEq _ (Just _) Nothing = False liftEq eq (Just x) (Just y) = eq x y

instance Ord1 Maybe where liftCompare _ Nothing Nothing = EQ liftCompare _ Nothing (Just _) = LT liftCompare _ (Just _) Nothing = GT liftCompare comp (Just x) (Just y) = comp x y

instance Read1 Maybe where liftReadPrec rp _ = parens (expectP (Ident "Nothing") *> pure Nothing) <|> readData (readUnaryWith rp "Just" Just)

[liftReadListPrec](Data.Functor.Classes.html#liftReadListPrec) = [liftReadListPrecDefault](Data.Functor.Classes.html#liftReadListPrecDefault)
[liftReadList](Data.Functor.Classes.html#liftReadList)     = [liftReadListDefault](Data.Functor.Classes.html#liftReadListDefault)

instance Show1 Maybe where liftShowsPrec _ _ _ Nothing = showString "Nothing" liftShowsPrec sp _ d (Just x) = showsUnaryWith sp "Just" d x

instance Eq1 [] where liftEq _ [] [] = True liftEq _ [] (:) = False liftEq _ (:) [] = False liftEq eq (x:xs) (y:ys) = eq x y && liftEq eq xs ys

instance Ord1 [] where liftCompare _ [] [] = EQ liftCompare _ [] (:) = LT liftCompare _ (:) [] = GT liftCompare comp (x:xs) (y:ys) = comp x y [mappend](GHC.Base.html#mappend) liftCompare comp xs ys

instance Read1 [] where liftReadPrec _ rl = rl liftReadListPrec = liftReadListPrecDefault liftReadList = liftReadListDefault

instance Show1 [] where liftShowsPrec _ sl _ = sl

instance Eq1 NonEmpty where liftEq eq (a :| as) (b :| bs) = eq a b && liftEq eq as bs

instance Ord1 NonEmpty where liftCompare cmp (a :| as) (b :| bs) = cmp a b [mappend](GHC.Base.html#mappend) liftCompare cmp as bs

instance Read1 NonEmpty where liftReadsPrec rdP rdL p s = readParen (p > 5) ([s'](#local-6989586621679421306) -> do (a, s'') <- rdP 6 s' (":|", s''') <- lex s'' (as, s'''') <- rdL s''' return (a :| as, s'''')) s

instance Show1 NonEmpty where liftShowsPrec shwP shwL p (a :| as) = showParen (p > 5) $ shwP 6 a . showString " :| " . shwL as

instance Eq2 (,) where liftEq2 e1 e2 (x1, y1) (x2, y2) = e1 x1 x2 && e2 y1 y2

instance Ord2 (,) where liftCompare2 comp1 comp2 (x1, y1) (x2, y2) = comp1 x1 x2 [mappend](GHC.Base.html#mappend) comp2 y1 y2

instance Read2 (,) where liftReadPrec2 rp1 _ rp2 _ = parens $ paren $ do x <- rp1 expectP (Punc ",") y <- rp2 return (x,y)

[liftReadListPrec2](Data.Functor.Classes.html#liftReadListPrec2) = [liftReadListPrec2Default](Data.Functor.Classes.html#liftReadListPrec2Default)
[liftReadList2](Data.Functor.Classes.html#liftReadList2)     = [liftReadList2Default](Data.Functor.Classes.html#liftReadList2Default)

instance Show2 (,) where liftShowsPrec2 sp1 _ sp2 _ _ (x, y) = showChar '(' . sp1 0 x . showChar ',' . sp2 0 y . showChar ')'

instance (Eq a) => Eq1 ((,) a) where liftEq = liftEq2 (==)

instance (Ord a) => Ord1 ((,) a) where liftCompare = liftCompare2 compare

instance (Read a) => Read1 ((,) a) where liftReadPrec = liftReadPrec2 readPrec readListPrec

[liftReadListPrec](Data.Functor.Classes.html#liftReadListPrec) = [liftReadListPrecDefault](Data.Functor.Classes.html#liftReadListPrecDefault)
[liftReadList](Data.Functor.Classes.html#liftReadList)     = [liftReadListDefault](Data.Functor.Classes.html#liftReadListDefault)

instance (Show a) => Show1 ((,) a) where liftShowsPrec = liftShowsPrec2 showsPrec showList

instance Eq2 Either where liftEq2 e1 _ (Left x) (Left y) = e1 x y liftEq2 _ _ (Left _) (Right _) = False liftEq2 _ _ (Right _) (Left _) = False liftEq2 _ e2 (Right x) (Right y) = e2 x y

instance Ord2 Either where liftCompare2 comp1 _ (Left x) (Left y) = comp1 x y liftCompare2 _ _ (Left _) (Right _) = LT liftCompare2 _ _ (Right _) (Left _) = GT liftCompare2 _ comp2 (Right x) (Right y) = comp2 x y

instance Read2 Either where liftReadPrec2 rp1 _ rp2 _ = readData $ readUnaryWith rp1 "Left" Left <|> readUnaryWith rp2 "Right" Right

[liftReadListPrec2](Data.Functor.Classes.html#liftReadListPrec2) = [liftReadListPrec2Default](Data.Functor.Classes.html#liftReadListPrec2Default)
[liftReadList2](Data.Functor.Classes.html#liftReadList2)     = [liftReadList2Default](Data.Functor.Classes.html#liftReadList2Default)

instance Show2 Either where liftShowsPrec2 sp1 _ _ _ d (Left x) = showsUnaryWith sp1 "Left" d x liftShowsPrec2 _ _ sp2 _ d (Right x) = showsUnaryWith sp2 "Right" d x

instance (Eq a) => Eq1 (Either a) where liftEq = liftEq2 (==)

instance (Ord a) => Ord1 (Either a) where liftCompare = liftCompare2 compare

instance (Read a) => Read1 (Either a) where liftReadPrec = liftReadPrec2 readPrec readListPrec

[liftReadListPrec](Data.Functor.Classes.html#liftReadListPrec) = [liftReadListPrecDefault](Data.Functor.Classes.html#liftReadListPrecDefault)
[liftReadList](Data.Functor.Classes.html#liftReadList)     = [liftReadListDefault](Data.Functor.Classes.html#liftReadListDefault)

instance (Show a) => Show1 (Either a) where liftShowsPrec = liftShowsPrec2 showsPrec showList

instance Eq1 Identity where liftEq eq (Identity x) (Identity y) = eq x y

instance Ord1 Identity where liftCompare comp (Identity x) (Identity y) = comp x y

instance Read1 Identity where liftReadPrec rp _ = readData $ readUnaryWith rp "Identity" Identity

[liftReadListPrec](Data.Functor.Classes.html#liftReadListPrec) = [liftReadListPrecDefault](Data.Functor.Classes.html#liftReadListPrecDefault)
[liftReadList](Data.Functor.Classes.html#liftReadList)     = [liftReadListDefault](Data.Functor.Classes.html#liftReadListDefault)

instance Show1 Identity where liftShowsPrec sp _ d (Identity x) = showsUnaryWith sp "Identity" d x

instance Eq2 Const where liftEq2 eq _ (Const x) (Const y) = eq x y

instance Ord2 Const where liftCompare2 comp _ (Const x) (Const y) = comp x y

instance Read2 Const where liftReadPrec2 rp _ _ _ = readData $ readUnaryWith rp "Const" Const

[liftReadListPrec2](Data.Functor.Classes.html#liftReadListPrec2) = [liftReadListPrec2Default](Data.Functor.Classes.html#liftReadListPrec2Default)
[liftReadList2](Data.Functor.Classes.html#liftReadList2)     = [liftReadList2Default](Data.Functor.Classes.html#liftReadList2Default)

instance Show2 Const where liftShowsPrec2 sp _ _ _ d (Const x) = showsUnaryWith sp "Const" d x

instance (Eq a) => Eq1 (Const a) where liftEq = liftEq2 (==)

instance (Ord a) => Ord1 (Const a) where liftCompare = liftCompare2 compare

instance (Read a) => Read1 (Const a) where liftReadPrec = liftReadPrec2 readPrec readListPrec

[liftReadListPrec](Data.Functor.Classes.html#liftReadListPrec) = [liftReadListPrecDefault](Data.Functor.Classes.html#liftReadListPrecDefault)
[liftReadList](Data.Functor.Classes.html#liftReadList)     = [liftReadListDefault](Data.Functor.Classes.html#liftReadListDefault)

instance (Show a) => Show1 (Const a) where liftShowsPrec = liftShowsPrec2 showsPrec showList

instance Eq1 Proxy where liftEq _ _ _ = True

instance Ord1 Proxy where liftCompare _ _ _ = EQ

instance Show1 Proxy where liftShowsPrec _ _ _ _ = showString "Proxy"

instance Read1 Proxy where liftReadPrec _ _ = parens (expectP (Ident "Proxy") *> pure Proxy)

liftReadListPrec = liftReadListPrecDefault liftReadList = liftReadListDefault

instance Eq1 Down where liftEq eq (Down x) (Down y) = eq x y

instance Ord1 Down where liftCompare comp (Down x) (Down y) = comp x y

instance Read1 Down where liftReadsPrec rp _ = readsData $ readsUnaryWith rp "Down" Down

instance Show1 Down where liftShowsPrec sp _ d (Down x) = showsUnaryWith sp "Down" d x

readsData :: (String -> ReadS a) -> Int -> ReadS a readsData reader d = readParen (d > 10) $ \ r -> [res | (kw,s) <- lex r, res <- reader kw s]

readData :: ReadPrec a -> ReadPrec a readData reader = parens $ prec 10 reader

readsUnaryWith :: (Int -> ReadS a) -> String -> (a -> t) -> String -> ReadS t readsUnaryWith rp name cons kw s = [(cons x,t) | kw == name, (x,t) <- rp 11 s]

readUnaryWith :: ReadPrec a -> String -> (a -> t) -> ReadPrec t readUnaryWith rp name cons = do expectP $ Ident name x <- step rp return $ cons x

readsBinaryWith :: (Int -> ReadS a) -> (Int -> ReadS b) -> String -> (a -> b -> t) -> String -> ReadS t readsBinaryWith rp1 rp2 name cons kw s = [(cons x y,u) | kw == name, (x,t) <- rp1 11 s, (y,u) <- rp2 11 t]

readBinaryWith :: ReadPrec a -> ReadPrec b -> String -> (a -> b -> t) -> ReadPrec t readBinaryWith rp1 rp2 name cons = do expectP $ Ident name x <- step rp1 y <- step rp2 return $ cons x y

showsUnaryWith :: (Int -> a -> ShowS) -> String -> Int -> a -> ShowS showsUnaryWith sp name d x = showParen (d > 10) $ showString name . showChar ' ' . sp 11 x

showsBinaryWith :: (Int -> a -> ShowS) -> (Int -> b -> ShowS) -> String -> Int -> a -> b -> ShowS showsBinaryWith sp1 sp2 name d x y = showParen (d > 10) $ showString name . showChar ' ' . sp1 11 x . showChar ' ' . sp2 11 y

{-# DEPRECATED readsUnary "Use readsUnaryWith to define liftReadsPrec" #-} readsUnary :: (Read a) => String -> (a -> t) -> String -> ReadS t readsUnary name cons kw s = [(cons x,t) | kw == name, (x,t) <- readsPrec 11 s]

{-# DEPRECATED readsUnary1 "Use readsUnaryWith to define liftReadsPrec" #-} readsUnary1 :: (Read1 f, Read a) => String -> (f a -> t) -> String -> ReadS t readsUnary1 name cons kw s = [(cons x,t) | kw == name, (x,t) <- readsPrec1 11 s]

{-# DEPRECATED readsBinary1 "Use readsBinaryWith to define liftReadsPrec" #-} readsBinary1 :: (Read1 f, Read1 g, Read a) => String -> (f a -> g a -> t) -> String -> ReadS t readsBinary1 name cons kw s = [(cons x y,u) | kw == name, (x,t) <- readsPrec1 11 s, (y,u) <- readsPrec1 11 t]

{-# DEPRECATED showsUnary "Use showsUnaryWith to define liftShowsPrec" #-} showsUnary :: (Show a) => String -> Int -> a -> ShowS showsUnary name d x = showParen (d > 10) $ showString name . showChar ' ' . showsPrec 11 x

{-# DEPRECATED showsUnary1 "Use showsUnaryWith to define liftShowsPrec" #-} showsUnary1 :: (Show1 f, Show a) => String -> Int -> f a -> ShowS showsUnary1 name d x = showParen (d > 10) $ showString name . showChar ' ' . showsPrec1 11 x

{-# DEPRECATED showsBinary1 "Use showsBinaryWith to define liftShowsPrec" #-} showsBinary1 :: (Show1 f, Show1 g, Show a) => String -> Int -> f a -> g a -> ShowS showsBinary1 name d x y = showParen (d > 10) $ showString name . showChar ' ' . showsPrec1 11 x . showChar ' ' . showsPrec1 11 y