either-n-0.1.0.0: src/Data/Lens/Injection/Injection19.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# OPTIONS_GHC -Wall #-}
-- | The nineteenth injection of a sum type, as a prism. The sum-type dual of 'Control.Lens.Field19'.
module Data.Lens.Injection.Injection19 (
Injection19 (..),
) where
import Control.Lens (Prism)
import Data.Lens.Injection.Generic (GInjection, injection)
import Data.Proxy (Proxy (..))
import GHC.Generics (Generic, Rep)
{- $setup
>>> :set -XDeriveGeneric -XMultiParamTypeClasses -XFlexibleInstances
>>> import Control.Lens((^?), (#))
>>> import GHC.Generics(Generic)
-}
{- | Access the nineteenth constructor of a sum type.
Where 'Control.Lens._19' is the nineteenth projection out of a product, '_I19' is the nineteenth
injection into a sum.
The default implementation is the prism to the nineteenth constructor of a
'Generic' type, @'injection' (Proxy :: Proxy 18)@.
>>> data T = C1 | C2 | C3 | C4 | C5 | C6 | C7 | C8 | C9 | C10 | C11 | C12 | C13 | C14 | C15 | C16 | C17 | C18 | C19 Int | C20 deriving (Show, Generic)
>>> instance Injection19 T T Int Int
>>> C19 1 ^? _I19
Just 1
>>> C20 ^? _I19
Nothing
>>> _I19 # 1 :: T
C19 1
-}
class Injection19 s t a b | s -> a, t -> b, s b -> t, t a -> s where
_I19 :: Prism s t a b
default _I19 :: (Generic s, Generic t, GInjection 18 (Rep s) (Rep t) a b) => Prism s t a b
_I19 =
injection (Proxy :: Proxy 18)
{-# INLINE _I19 #-}