{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Generic.Data.Internal.Resolvers where
import Data.Bifunctor (first)
import Data.Functor.Classes
import Data.Function (on)
import Text.Read (Read(..))
import Generic.Data.Internal.Compat(readPrec1)
newtype Id1 f a = Id1 { forall (f :: * -> *) a. Id1 f a -> f a
unId1 :: f a }
deriving (forall a b. (a -> b -> Bool) -> Id1 f a -> Id1 f b -> Bool
forall (f :: * -> *) a b.
Eq1 f =>
(a -> b -> Bool) -> Id1 f a -> Id1 f b -> Bool
forall (f :: * -> *).
(forall a b. (a -> b -> Bool) -> f a -> f b -> Bool) -> Eq1 f
liftEq :: forall a b. (a -> b -> Bool) -> Id1 f a -> Id1 f b -> Bool
$cliftEq :: forall (f :: * -> *) a b.
Eq1 f =>
(a -> b -> Bool) -> Id1 f a -> Id1 f b -> Bool
Eq1, forall a b. (a -> b -> Ordering) -> Id1 f a -> Id1 f b -> Ordering
forall {f :: * -> *}. Ord1 f => Eq1 (Id1 f)
forall (f :: * -> *) a b.
Ord1 f =>
(a -> b -> Ordering) -> Id1 f a -> Id1 f b -> Ordering
forall (f :: * -> *).
Eq1 f
-> (forall a b. (a -> b -> Ordering) -> f a -> f b -> Ordering)
-> Ord1 f
liftCompare :: forall a b. (a -> b -> Ordering) -> Id1 f a -> Id1 f b -> Ordering
$cliftCompare :: forall (f :: * -> *) a b.
Ord1 f =>
(a -> b -> Ordering) -> Id1 f a -> Id1 f b -> Ordering
Ord1, forall a. ReadPrec a -> ReadPrec [a] -> ReadPrec [Id1 f a]
forall a. ReadPrec a -> ReadPrec [a] -> ReadPrec (Id1 f a)
forall a. (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Id1 f a)
forall a. (Int -> ReadS a) -> ReadS [a] -> ReadS [Id1 f a]
forall (f :: * -> *) a.
Read1 f =>
ReadPrec a -> ReadPrec [a] -> ReadPrec [Id1 f a]
forall (f :: * -> *) a.
Read1 f =>
ReadPrec a -> ReadPrec [a] -> ReadPrec (Id1 f a)
forall (f :: * -> *) a.
Read1 f =>
(Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Id1 f a)
forall (f :: * -> *) a.
Read1 f =>
(Int -> ReadS a) -> ReadS [a] -> ReadS [Id1 f a]
forall (f :: * -> *).
(forall a. (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (f a))
-> (forall a. (Int -> ReadS a) -> ReadS [a] -> ReadS [f a])
-> (forall a. ReadPrec a -> ReadPrec [a] -> ReadPrec (f a))
-> (forall a. ReadPrec a -> ReadPrec [a] -> ReadPrec [f a])
-> Read1 f
liftReadListPrec :: forall a. ReadPrec a -> ReadPrec [a] -> ReadPrec [Id1 f a]
$cliftReadListPrec :: forall (f :: * -> *) a.
Read1 f =>
ReadPrec a -> ReadPrec [a] -> ReadPrec [Id1 f a]
liftReadPrec :: forall a. ReadPrec a -> ReadPrec [a] -> ReadPrec (Id1 f a)
$cliftReadPrec :: forall (f :: * -> *) a.
Read1 f =>
ReadPrec a -> ReadPrec [a] -> ReadPrec (Id1 f a)
liftReadList :: forall a. (Int -> ReadS a) -> ReadS [a] -> ReadS [Id1 f a]
$cliftReadList :: forall (f :: * -> *) a.
Read1 f =>
(Int -> ReadS a) -> ReadS [a] -> ReadS [Id1 f a]
liftReadsPrec :: forall a. (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Id1 f a)
$cliftReadsPrec :: forall (f :: * -> *) a.
Read1 f =>
(Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Id1 f a)
Read1, forall a.
(Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Id1 f a -> ShowS
forall a.
(Int -> a -> ShowS) -> ([a] -> ShowS) -> [Id1 f a] -> ShowS
forall (f :: * -> *) a.
Show1 f =>
(Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Id1 f a -> ShowS
forall (f :: * -> *) a.
Show1 f =>
(Int -> a -> ShowS) -> ([a] -> ShowS) -> [Id1 f a] -> ShowS
forall (f :: * -> *).
(forall a.
(Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> f a -> ShowS)
-> (forall a.
(Int -> a -> ShowS) -> ([a] -> ShowS) -> [f a] -> ShowS)
-> Show1 f
liftShowList :: forall a.
(Int -> a -> ShowS) -> ([a] -> ShowS) -> [Id1 f a] -> ShowS
$cliftShowList :: forall (f :: * -> *) a.
Show1 f =>
(Int -> a -> ShowS) -> ([a] -> ShowS) -> [Id1 f a] -> ShowS
liftShowsPrec :: forall a.
(Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Id1 f a -> ShowS
$cliftShowsPrec :: forall (f :: * -> *) a.
Show1 f =>
(Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Id1 f a -> ShowS
Show1)
instance (Eq1 f, Eq a) => Eq (Id1 f a) where
== :: Id1 f a -> Id1 f a -> Bool
(==) = forall (f :: * -> *) a. (Eq1 f, Eq a) => f a -> f a -> Bool
eq1 forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
`on` forall (f :: * -> *) a. Id1 f a -> f a
unId1
instance (Ord1 f, Ord a) => Ord (Id1 f a) where
compare :: Id1 f a -> Id1 f a -> Ordering
compare = forall (f :: * -> *) a. (Ord1 f, Ord a) => f a -> f a -> Ordering
compare1 forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
`on` forall (f :: * -> *) a. Id1 f a -> f a
unId1
instance (Read1 f, Read a) => Read (Id1 f a) where
readsPrec :: Int -> ReadS (Id1 f a)
readsPrec = (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (p :: * -> * -> *) a b c.
Bifunctor p =>
(a -> b) -> p a c -> p b c
first) forall (f :: * -> *) a. f a -> Id1 f a
Id1 forall (f :: * -> *) a. (Read1 f, Read a) => Int -> ReadS (f a)
readsPrec1
readPrec :: ReadPrec (Id1 f a)
readPrec = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall (f :: * -> *) a. f a -> Id1 f a
Id1 forall (f :: * -> *) a. (Read1 f, Read a) => ReadPrec (f a)
readPrec1
instance (Show1 f, Show a) => Show (Id1 f a) where
showsPrec :: Int -> Id1 f a -> ShowS
showsPrec Int
d = forall (f :: * -> *) a. (Show1 f, Show a) => Int -> f a -> ShowS
showsPrec1 Int
d forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a. Id1 f a -> f a
unId1
newtype Opaque a = Opaque { forall a. Opaque a -> a
unOpaque :: a }
instance Eq (Opaque a) where
== :: Opaque a -> Opaque a -> Bool
(==) Opaque a
_ Opaque a
_ = Bool
True
instance Ord (Opaque a) where
compare :: Opaque a -> Opaque a -> Ordering
compare Opaque a
_ Opaque a
_ = Ordering
EQ
instance Show (Opaque a) where
showsPrec :: Int -> Opaque a -> ShowS
showsPrec Int
_ Opaque a
_ = String -> ShowS
showString String
"_"
instance Eq1 Opaque where
liftEq :: forall a b. (a -> b -> Bool) -> Opaque a -> Opaque b -> Bool
liftEq a -> b -> Bool
_ Opaque a
_ Opaque b
_ = Bool
True
instance Ord1 Opaque where
liftCompare :: forall a b.
(a -> b -> Ordering) -> Opaque a -> Opaque b -> Ordering
liftCompare a -> b -> Ordering
_ Opaque a
_ Opaque b
_ = Ordering
EQ
instance Show1 Opaque where
liftShowsPrec :: forall a.
(Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Opaque a -> ShowS
liftShowsPrec Int -> a -> ShowS
_ [a] -> ShowS
_ Int
_ Opaque a
_ = String -> ShowS
showString String
"_"
newtype Opaque1 f a = Opaque1 { forall (f :: * -> *) a. Opaque1 f a -> f a
unOpaque1 :: f a }
instance Eq (Opaque1 f a) where
== :: Opaque1 f a -> Opaque1 f a -> Bool
(==) Opaque1 f a
_ Opaque1 f a
_ = Bool
True
instance Ord (Opaque1 f a) where
compare :: Opaque1 f a -> Opaque1 f a -> Ordering
compare Opaque1 f a
_ Opaque1 f a
_ = Ordering
EQ
instance Show (Opaque1 f a) where
showsPrec :: Int -> Opaque1 f a -> ShowS
showsPrec Int
_ Opaque1 f a
_ = String -> ShowS
showString String
"_"
instance Eq1 (Opaque1 f) where
liftEq :: forall a b. (a -> b -> Bool) -> Opaque1 f a -> Opaque1 f b -> Bool
liftEq a -> b -> Bool
_ Opaque1 f a
_ Opaque1 f b
_ = Bool
True
instance Ord1 (Opaque1 f) where
liftCompare :: forall a b.
(a -> b -> Ordering) -> Opaque1 f a -> Opaque1 f b -> Ordering
liftCompare a -> b -> Ordering
_ Opaque1 f a
_ Opaque1 f b
_ = Ordering
EQ
instance Show1 (Opaque1 f) where
liftShowsPrec :: forall a.
(Int -> a -> ShowS)
-> ([a] -> ShowS) -> Int -> Opaque1 f a -> ShowS
liftShowsPrec Int -> a -> ShowS
_ [a] -> ShowS
_ Int
_ Opaque1 f a
_ = String -> ShowS
showString String
"_"