{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE PolyKinds #-}
module GHC.Generics.Lens
(
generic
, generic1
, _V1
, _U1
, _Par1
, _Rec1
, _K1
, _M1
, _L1
, _R1
, _UAddr
, _UChar
, _UDouble
, _UFloat
, _UInt
, _UWord
) where
import Control.Lens
import GHC.Exts (Char(..), Double(..), Float(..),
Int(..), Ptr(..), Word(..))
import qualified GHC.Generics as Generic
import GHC.Generics hiding (from, to)
#if !(MIN_VERSION_base(4,9,0))
import Generics.Deriving.Base hiding (from, to)
#endif
generic :: (Generic a, Generic b) => Iso a b (Rep a g) (Rep b h)
generic :: forall a b g h.
(Generic a, Generic b) =>
Iso a b (Rep a g) (Rep b h)
generic = (a -> Rep a g) -> (Rep b h -> b) -> Iso a b (Rep a g) (Rep b h)
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso a -> Rep a g
forall a x. Generic a => a -> Rep a x
Generic.from Rep b h -> b
forall a x. Generic a => Rep a x -> a
Generic.to
{-# INLINE generic #-}
generic1 :: (Generic1 f, Generic1 g) => Iso (f a) (g b) (Rep1 f a) (Rep1 g b)
generic1 :: forall {k} {k} (f :: k -> *) (g :: k -> *) (a :: k) (b :: k).
(Generic1 f, Generic1 g) =>
Iso (f a) (g b) (Rep1 f a) (Rep1 g b)
generic1 = (f a -> Rep1 f a)
-> (Rep1 g b -> g b) -> Iso (f a) (g b) (Rep1 f a) (Rep1 g b)
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso f a -> Rep1 f a
forall k (f :: k -> *) (a :: k). Generic1 f => f a -> Rep1 f a
from1 Rep1 g b -> g b
forall k (f :: k -> *) (a :: k). Generic1 f => Rep1 f a -> f a
to1
{-# INLINE generic1 #-}
_V1 :: Over p f (V1 s) (V1 t) a b
_V1 :: forall {k} {k} {k} (p :: k -> * -> *) (f :: * -> *) (s :: k)
(t :: k) (a :: k) b.
Over p f (V1 s) (V1 t) a b
_V1 p a (f b)
_ = V1 s -> f (V1 t)
forall {p} {a}. p -> a
absurd where
absurd :: p -> a
absurd !p
_a = a
forall a. HasCallStack => a
undefined
{-# INLINE _V1 #-}
_U1 :: Iso (U1 p) (U1 q) () ()
_U1 :: forall {k} {k} (p :: k) (q :: k). Iso (U1 p) (U1 q) () ()
_U1 = (U1 p -> ()) -> (() -> U1 q) -> Iso (U1 p) (U1 q) () ()
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso (() -> U1 p -> ()
forall a b. a -> b -> a
const ()) (U1 q -> () -> U1 q
forall a b. a -> b -> a
const U1 q
forall k (p :: k). U1 p
U1)
{-# INLINE _U1 #-}
_Par1 :: Iso (Par1 p) (Par1 q) p q
_Par1 :: forall p q. Iso (Par1 p) (Par1 q) p q
_Par1 = (Par1 p -> p) -> (q -> Par1 q) -> Iso (Par1 p) (Par1 q) p q
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Par1 p -> p
forall p. Par1 p -> p
unPar1 q -> Par1 q
forall p. p -> Par1 p
Par1
{-# INLINE _Par1 #-}
_Rec1 :: Iso (Rec1 f p) (Rec1 g q) (f p) (g q)
_Rec1 :: forall {k} {k} (f :: k -> *) (p :: k) (g :: k -> *) (q :: k).
Iso (Rec1 f p) (Rec1 g q) (f p) (g q)
_Rec1 = (Rec1 f p -> f p)
-> (g q -> Rec1 g q) -> Iso (Rec1 f p) (Rec1 g q) (f p) (g q)
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Rec1 f p -> f p
forall k (f :: k -> *) (p :: k). Rec1 f p -> f p
unRec1 g q -> Rec1 g q
forall k (f :: k -> *) (p :: k). f p -> Rec1 f p
Rec1
{-# INLINE _Rec1 #-}
_K1 :: Iso (K1 i c p) (K1 j d q) c d
_K1 :: forall {k} {k} i c (p :: k) j d (q :: k).
Iso (K1 i c p) (K1 j d q) c d
_K1 = (K1 i c p -> c) -> (d -> K1 j d q) -> Iso (K1 i c p) (K1 j d q) c d
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso K1 i c p -> c
forall k i c (p :: k). K1 i c p -> c
unK1 d -> K1 j d q
forall k i c (p :: k). c -> K1 i c p
K1
{-# INLINE _K1 #-}
_M1 :: Iso (M1 i c f p) (M1 j d g q) (f p) (g q)
_M1 :: forall {k} {k} i (c :: Meta) (f :: k -> *) (p :: k) j (d :: Meta)
(g :: k -> *) (q :: k).
Iso (M1 i c f p) (M1 j d g q) (f p) (g q)
_M1 = (M1 i c f p -> f p)
-> (g q -> M1 j d g q) -> Iso (M1 i c f p) (M1 j d g q) (f p) (g q)
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso M1 i c f p -> f p
forall k i (c :: Meta) (f :: k -> *) (p :: k). M1 i c f p -> f p
unM1 g q -> M1 j d g q
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1
{-# INLINE _M1 #-}
_L1 :: Prism' ((f :+: g) a) (f a)
_L1 :: forall {k} (f :: k -> *) (g :: k -> *) (a :: k).
Prism' ((:+:) f g a) (f a)
_L1 = (f a -> (:+:) f g a)
-> ((:+:) f g a -> Either ((:+:) f g a) (f a))
-> Prism ((:+:) f g a) ((:+:) f g a) (f a) (f a)
forall b t s a. (b -> t) -> (s -> Either t a) -> Prism s t a b
prism f a -> (:+:) f g a
forall {k} {f :: k -> *} {p :: k} {g :: k -> *}. f p -> (:+:) f g p
remitter (:+:) f g a -> Either ((:+:) f g a) (f a)
forall {k} {f :: k -> *} {g :: k -> *} {p :: k}.
(:+:) f g p -> Either ((:+:) f g p) (f p)
reviewer
where
remitter :: f p -> (:+:) f g p
remitter = f p -> (:+:) f g p
forall k (f :: k -> *) (g :: k -> *) (p :: k). f p -> (:+:) f g p
L1
reviewer :: (:+:) f g p -> Either ((:+:) f g p) (f p)
reviewer (L1 f p
l) = f p -> Either ((:+:) f g p) (f p)
forall a b. b -> Either a b
Right f p
l
reviewer (:+:) f g p
x = (:+:) f g p -> Either ((:+:) f g p) (f p)
forall a b. a -> Either a b
Left (:+:) f g p
x
{-# INLINE _L1 #-}
_R1 :: Prism' ((f :+: g) a) (g a)
_R1 :: forall {k} (f :: k -> *) (g :: k -> *) (a :: k).
Prism' ((:+:) f g a) (g a)
_R1 = (g a -> (:+:) f g a)
-> ((:+:) f g a -> Either ((:+:) f g a) (g a))
-> Prism ((:+:) f g a) ((:+:) f g a) (g a) (g a)
forall b t s a. (b -> t) -> (s -> Either t a) -> Prism s t a b
prism g a -> (:+:) f g a
forall {k} {g :: k -> *} {p :: k} {f :: k -> *}. g p -> (:+:) f g p
remitter (:+:) f g a -> Either ((:+:) f g a) (g a)
forall {k} {f :: k -> *} {g :: k -> *} {p :: k}.
(:+:) f g p -> Either ((:+:) f g p) (g p)
reviewer
where
remitter :: g p -> (:+:) f g p
remitter = g p -> (:+:) f g p
forall k (f :: k -> *) (g :: k -> *) (p :: k). g p -> (:+:) f g p
R1
reviewer :: (:+:) f g p -> Either ((:+:) f g p) (g p)
reviewer (R1 g p
l) = g p -> Either ((:+:) f g p) (g p)
forall a b. b -> Either a b
Right g p
l
reviewer (:+:) f g p
x = (:+:) f g p -> Either ((:+:) f g p) (g p)
forall a b. a -> Either a b
Left (:+:) f g p
x
{-# INLINE _R1 #-}
_UAddr :: Iso (UAddr p) (UAddr q) (Ptr c) (Ptr d)
_UAddr :: forall {k} {k} (p :: k) (q :: k) c d.
Iso (UAddr p) (UAddr q) (Ptr c) (Ptr d)
_UAddr = (URec (Ptr ()) p -> Ptr c)
-> (Ptr d -> URec (Ptr ()) q)
-> Iso (URec (Ptr ()) p) (URec (Ptr ()) q) (Ptr c) (Ptr d)
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso URec (Ptr ()) p -> Ptr c
forall {k} {p :: k} {a}. URec (Ptr ()) p -> Ptr a
remitter Ptr d -> URec (Ptr ()) q
forall {k} {a} {p :: k}. Ptr a -> URec (Ptr ()) p
reviewer
where
remitter :: URec (Ptr ()) p -> Ptr a
remitter (UAddr Addr#
a) = Addr# -> Ptr a
forall a. Addr# -> Ptr a
Ptr Addr#
a
reviewer :: Ptr a -> URec (Ptr ()) p
reviewer (Ptr Addr#
a) = Addr# -> URec (Ptr ()) p
forall k (p :: k). Addr# -> URec (Ptr ()) p
UAddr Addr#
a
{-# INLINE _UAddr #-}
_UChar :: Iso (UChar p) (UChar q) Char Char
_UChar :: forall {k} {k} (p :: k) (q :: k). Iso (UChar p) (UChar q) Char Char
_UChar = (URec Char p -> Char)
-> (Char -> URec Char q)
-> Iso (URec Char p) (URec Char q) Char Char
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso URec Char p -> Char
forall {k} {p :: k}. URec Char p -> Char
remitter Char -> URec Char q
forall {k} {p :: k}. Char -> URec Char p
reviewer
where
remitter :: URec Char p -> Char
remitter (UChar Char#
c) = Char# -> Char
C# Char#
c
reviewer :: Char -> URec Char p
reviewer (C# Char#
c) = Char# -> URec Char p
forall k (p :: k). Char# -> URec Char p
UChar Char#
c
{-# INLINE _UChar #-}
_UDouble :: Iso (UDouble p) (UDouble q) Double Double
_UDouble :: forall {k} {k} (p :: k) (q :: k).
Iso (UDouble p) (UDouble q) Double Double
_UDouble = (URec Double p -> Double)
-> (Double -> URec Double q)
-> Iso (URec Double p) (URec Double q) Double Double
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso URec Double p -> Double
forall {k} {p :: k}. URec Double p -> Double
remitter Double -> URec Double q
forall {k} {p :: k}. Double -> URec Double p
reviewer
where
remitter :: URec Double p -> Double
remitter (UDouble Double#
d) = Double# -> Double
D# Double#
d
reviewer :: Double -> URec Double p
reviewer (D# Double#
d) = Double# -> URec Double p
forall k (p :: k). Double# -> URec Double p
UDouble Double#
d
{-# INLINE _UDouble #-}
_UFloat :: Iso (UFloat p) (UFloat q) Float Float
_UFloat :: forall {k} {k} (p :: k) (q :: k).
Iso (UFloat p) (UFloat q) Float Float
_UFloat = (URec Float p -> Float)
-> (Float -> URec Float q)
-> Iso (URec Float p) (URec Float q) Float Float
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso URec Float p -> Float
forall {k} {p :: k}. URec Float p -> Float
remitter Float -> URec Float q
forall {k} {p :: k}. Float -> URec Float p
reviewer
where
remitter :: URec Float p -> Float
remitter (UFloat Float#
f) = Float# -> Float
F# Float#
f
reviewer :: Float -> URec Float p
reviewer (F# Float#
f) = Float# -> URec Float p
forall k (p :: k). Float# -> URec Float p
UFloat Float#
f
{-# INLINE _UFloat #-}
_UInt :: Iso (UInt p) (UInt q) Int Int
_UInt :: forall {k} {k} (p :: k) (q :: k). Iso (UInt p) (UInt q) Int Int
_UInt = (URec Int p -> Int)
-> (Int -> URec Int q) -> Iso (URec Int p) (URec Int q) Int Int
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso URec Int p -> Int
forall {k} {p :: k}. URec Int p -> Int
remitter Int -> URec Int q
forall {k} {p :: k}. Int -> URec Int p
reviewer
where
remitter :: URec Int p -> Int
remitter (UInt Int#
i) = Int# -> Int
I# Int#
i
reviewer :: Int -> URec Int p
reviewer (I# Int#
i) = Int# -> URec Int p
forall k (p :: k). Int# -> URec Int p
UInt Int#
i
{-# INLINE _UInt #-}
_UWord :: Iso (UWord p) (UWord q) Word Word
_UWord :: forall {k} {k} (p :: k) (q :: k). Iso (UWord p) (UWord q) Word Word
_UWord = (URec Word p -> Word)
-> (Word -> URec Word q)
-> Iso (URec Word p) (URec Word q) Word Word
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso URec Word p -> Word
forall {k} {p :: k}. URec Word p -> Word
remitter Word -> URec Word q
forall {k} {p :: k}. Word -> URec Word p
reviewer
where
remitter :: URec Word p -> Word
remitter (UWord Word#
w) = Word# -> Word
W# Word#
w
reviewer :: Word -> URec Word p
reviewer (W# Word#
w) = Word# -> URec Word p
forall k (p :: k). Word# -> URec Word p
UWord Word#
w
{-# INLINE _UWord #-}