#ifndef HAVE_FUNCTOR_CLASSES
#endif
module Data.OverloadedRecords
(
module Data.OverloadedLabels
, FieldType
, HasField(..)
, Getter
, get
, UpdateType
, ModifyField(..)
, R
, Rs
, (:::)
, Rec(..)
, Setting
, setting
, Setter
, set
, Modifier(..)
, modify
, WrappedLensLike(..)
, lns
, ModifyRec(..)
, weakenRec
, strengthenRec
, Position
, ModifyField'
, fieldLens'
, modifyField'
, setField'
, Setter'
, set'
, Modifier'
, modify'
, WrappedLensLike'
, lns'
, FromArrow
, IsFieldAccessor(..)
)
where
import Data.Bool (Bool(False, True))
import Data.Function (($), const)
import Data.Functor (Functor, (<$>))
import Data.Maybe (Maybe(Just, Nothing))
import Data.Proxy (Proxy)
import Data.Type.Equality (type (==))
import Data.Typeable (Typeable)
import GHC.Exts (Constraint, Proxy#, proxy#)
import GHC.Generics (Generic, Generic1)
import GHC.TypeLits (type (), type (+), Nat, Symbol)
#ifdef HAVE_FUNCTOR_CLASSES
import Data.Eq (Eq((==)))
import Data.Functor.Classes
( Eq1(liftEq)
, Ord1(liftCompare)
, Show1(liftShowsPrec)
, compare1
, eq1
, showsPrec1
, showsUnaryWith
)
import Data.Ord (Ord(compare))
import Text.Show (Show(showsPrec))
#else
import Data.Eq (Eq)
import Data.Ord (Ord)
import Text.Show (Show)
#endif
#ifdef HAVE_NON_EMPTY_LIST
import Data.List.NonEmpty (NonEmpty((:|)))
#endif
import Data.OverloadedLabels
type family FieldType (l :: Symbol) (s :: *) :: *
type family UpdateType (l :: Symbol) (s :: *) (b :: *) :: *
class HasField (l :: Symbol) s a | l s -> a where
getField :: Proxy# l -> s -> a
class (HasField l s a) => ModifyField (l :: Symbol) s t a b
| l s -> a, l t -> b, l s b -> t, l t a -> s
where
modifyField :: Proxy# l -> (a -> b) -> s -> t
modifyField proxy f s = setField proxy s (f (getField proxy s))
setField :: Proxy# l -> s -> b -> t
setField proxy s b = modifyField proxy (const b) s
fieldLens :: Functor f => Proxy# l -> (a -> f b) -> s -> f t
fieldLens proxy f s = setField proxy s <$> f (getField proxy s)
type ModifyField' l s a = ModifyField l s s a a
setField' :: ModifyField' l s a => Proxy# l -> s -> a -> s
setField' = setField
modifyField' :: ModifyField' l s a => Proxy# l -> (a -> a) -> s -> s
modifyField' = modifyField
fieldLens'
:: (Functor f, ModifyField' l s a)
=> Proxy# l
-> (a -> f a)
-> s -> f s
fieldLens' = fieldLens
type family FromArrow (a :: *) :: Bool where
FromArrow (x -> y) = 'True
FromArrow t = 'False
class
( z ~ FromArrow x
) => IsFieldAccessor (l :: Symbol) x y (z :: Bool) | l y -> x
where
fieldAccessor :: Proxy# l -> x -> y
instance
( Functor f
, ModifyField l s t a b
) => IsFieldAccessor l (a -> f b) (s -> f t) 'True
where
fieldAccessor = fieldLens
instance
( HasField l s a
, FromArrow s ~ 'False
) => IsFieldAccessor l s a 'False
where
fieldAccessor = getField
instance IsFieldAccessor l x y (FromArrow x) => IsLabel l (x -> y) where
fromLabel = fieldAccessor
type family R (ts :: [(Symbol, *)]) (r :: *) :: Constraint where
R '[] r = ()
R ('(l, a) ': ts) r = (ModifyField' l r a, R ts r)
type family Rs (cs :: [[(Symbol, *)]]) (r :: *) where
Rs '[] r = R '[] r
Rs (c ': cs) r = (R c r, Rs cs r)
type (:::) (l :: Symbol) (a :: *) = '(l, a)
data Rec ctx r where
Rec :: R ctx r => r -> Rec ctx r
deriving (Typeable)
weakenRec :: Rec ((l ::: a) ': ctx) r -> Rec ctx r
weakenRec (Rec r) = Rec r
strengthenRec :: ModifyField' l r a => Rec ctx r -> Rec ((l ::: a) ': ctx) r
strengthenRec (Rec r) = Rec r
#ifdef HAVE_FUNCTOR_CLASSES
instance Eq1 (Rec ctx) where
liftEq f (Rec a) (Rec b) = f a b
instance Ord1 (Rec ctx) where
liftCompare f (Rec a) (Rec b) = f a b
instance Show1 (Rec ctx) where
liftShowsPrec sp _sl d (Rec r) = showsUnaryWith sp "Rec" d r
instance Eq r => Eq (Rec ctx r) where
(==) = eq1
instance Ord r => Ord (Rec ctx r) where
compare = compare1
instance Show r => Show (Rec ctx r) where
showsPrec = showsPrec1
#else
deriving instance Eq r => Eq (Rec ctx r)
deriving instance Ord r => Ord (Rec ctx r)
deriving instance Show r => Show (Rec ctx r)
#endif
class ModifyRec# (l :: Symbol) a (cs :: [(Symbol, *)]) (n :: Nat) (b :: Bool)
where
getRecField# :: Proxy# '(n, b) -> Proxy# l -> Rec cs r -> a
modifyRecField#
:: Proxy# '(n, b) -> Proxy# l -> (a -> a) -> Rec cs r -> Rec cs r
setRecField# :: Proxy# '(n, b) -> Proxy# l -> Rec cs r -> a -> Rec cs r
instance (cs ~ ((l ::: a) ': cs')) => ModifyRec# l a cs 0 'True where
getRecField# _ p (Rec r) = getField p r
modifyRecField# _ p f (Rec r) = Rec (modifyField p f r)
setRecField# _ p (Rec r) a = Rec (setField p r a)
instance
( cs ~ ((l' ::: b) ': cs')
, n' ~ (n 1)
, ModifyRec# l a cs' n' (n' == 0)
) => ModifyRec# l a cs n 'False
where
getRecField# _ p r =
getRecField# (proxy# :: Proxy# '(n', n' == 0)) p (weakenRec r)
modifyRecField# _ p f r@(Rec _) = strengthenRec
$ modifyRecField# (proxy# :: Proxy# '(n', n' == 0)) p f (weakenRec r)
setRecField# _ p r@(Rec _) a = strengthenRec
$ setRecField# (proxy# :: Proxy# '(n', n' == 0)) p (weakenRec r) a
type family Position (l :: Symbol) (a :: *) (cs :: [(Symbol, *)]) :: Nat where
Position l a ('(l, a) ': cs) = 0
Position l a (any ': cs) = 1 + Position l a cs
class
( ModifyRec# l a cs (Position l a cs) (Position l a cs == 0)
) => ModifyRec (l :: Symbol) a (cs :: [(Symbol, *)])
where
getRecField :: Proxy# l -> Rec cs r -> a
getRecField = getRecField#
(proxy# :: Proxy# '(Position l a cs, Position l a cs == 0))
modifyRecField :: Proxy# l -> (a -> a) -> Rec cs r -> Rec cs r
modifyRecField = modifyRecField#
(proxy# :: Proxy# '(Position l a cs, Position l a cs == 0))
setRecField :: Proxy# l -> Rec cs r -> a -> Rec cs r
setRecField = setRecField#
(proxy# :: Proxy# '(Position l a cs, Position l a cs == 0))
instance
( ModifyRec# l a cs (Position l a cs) (Position l a cs == 0)
) => ModifyRec l a cs
newtype Getter s a = Getter (s -> a)
deriving (Generic, Generic1, Typeable)
instance (HasField l s a) => IsLabel l (Getter s a) where
fromLabel proxy = Getter (getField proxy)
get :: Getter s a -> s -> a
get (Getter f) = f
type Setting a s t b = Modifier s t a b
setting :: Setting a s t b -> Proxy a -> b -> s -> t
setting x _proxy b = modify x (const b)
type Setter s t b = forall a. Modifier s t a b
set :: Setter s t b -> b -> s -> t
set m b = modify m (const b)
type Setter' s a = Modifier' s a
set' :: Setter' s a -> a -> s -> s
set' m a = modify' m (const a)
newtype Modifier s t a b = Modifier ((a -> b) -> s -> t)
deriving (Generic, Typeable)
instance (ModifyField l s t a b) => IsLabel l (Modifier s t a b) where
fromLabel proxy = Modifier (modifyField proxy)
modify :: Modifier s t a b -> (a -> b) -> s -> t
modify (Modifier f) = f
type Modifier' s a = Modifier s s a a
modify' :: Modifier' s a -> (a -> a) -> s -> s
modify' = modify
newtype WrappedLensLike f s t a b = WrappedLensLike ((a -> f b) -> s -> f t)
instance
( Functor f
, ModifyField l s t a b
) => IsLabel l (WrappedLensLike f s t a b)
where
fromLabel proxy = WrappedLensLike (fieldLens proxy)
type WrappedLensLike' f s a = WrappedLensLike f s s a a
lns :: WrappedLensLike f s t a b -> (a -> f b) -> s -> f t
lns (WrappedLensLike l) = l
lns' :: WrappedLensLike' f s a -> (a -> f a) -> s -> f s
lns' (WrappedLensLike l) = l
type instance FieldType "fst" (a, b) = a
type instance UpdateType "fst" (a, b) a' = (a', b)
type instance FieldType "snd" (a, b) = b
type instance UpdateType "snd" (a, b) b' = (a, b')
type instance FieldType "curry" ((a, b) -> c) = a -> b -> c
instance HasField "fst" (a, b) a where
getField _proxy (a, _) = a
instance HasField "snd" (a, b) b where
getField _proxy (_, b) = b
instance HasField "curry" ((a, b) -> c) (a -> b -> c) where
getField _proxy f a b = f (a, b)
instance ModifyField "fst" (a, b) (a', b) a a' where
modifyField _proxy f (a, b) = (f a, b)
setField _proxy (_, b) a = (a, b)
instance ModifyField "snd" (a, b) (a, b') b b' where
modifyField _proxy f (a, b) = (a, f b)
setField _proxy (a, _) b = (a, b)
type instance FieldType "fst" (a, b, c) = a
type instance UpdateType "fst" (a, b, c) a' = (a', b, c)
type instance FieldType "snd" (a, b, c) = b
type instance UpdateType "snd" (a, b, c) b' = (a, b', c)
type instance FieldType "thd" (a, b, c) = c
type instance UpdateType "thd" (a, b, c) c' = (a, b, c')
type instance FieldType "curry" ((a, b, c) -> d) = a -> b -> c -> d
instance HasField "fst" (a, b, c) a where
getField _proxy (a, _, _) = a
instance HasField "snd" (a, b, c) b where
getField _proxy (_, b, _) = b
instance HasField "thd" (a, b, c) c where
getField _proxy (_, _, c) = c
instance HasField "curry" ((a, b, c) -> d) (a -> b -> c -> d) where
getField _proxy f a b c = f (a, b, c)
instance ModifyField "fst" (a, b, c) (a', b, c) a a' where
modifyField _proxy f (a, b, c) = (f a, b, c)
setField _proxy (_, b, c) a = (a, b, c)
instance ModifyField "snd" (a, b, c) (a, b', c) b b' where
modifyField _proxy f (a, b, c) = (a, f b, c)
setField _proxy (a, _, c) b = (a, b, c)
instance ModifyField "thd" (a, b, c) (a, b, c') c c' where
modifyField _proxy f (a, b, c) = (a, b, f c)
setField _proxy (a, b, _) c = (a, b, c)
type instance FieldType "fst" (a1, a2, a3, a4) = a1
type instance UpdateType "fst" (a1, a2, a3, a4) a1' = (a1', a2, a3, a4)
type instance FieldType "snd" (a1, a2, a3, a4) = a2
type instance UpdateType "snd" (a1, a2, a3, a4) a2' = (a1, a2', a3, a4)
type instance FieldType "thd" (a1, a2, a3, a4) = a3
type instance UpdateType "thd" (a1, a2, a3, a4) a3' = (a1, a3', a3, a4)
type instance FieldType "curry" ((a1, a2, a3, a4) -> r) =
a1 -> a2 -> a3 -> a4 -> r
instance HasField "fst" (a1, a2, a3, a4) a1 where
getField _proxy (a1, _, _, _) = a1
instance HasField "snd" (a1, a2, a3, a4) a2 where
getField _proxy (_, a2, _, _) = a2
instance HasField "thd" (a1, a2, a3, a4) a3 where
getField _proxy (_, _, a3, _) = a3
instance ModifyField "fst" (a1, a2, a3, a4) (a1', a2, a3, a4) a1 a1' where
modifyField _proxy f (a1, a2, a3, a4) = (f a1, a2, a3, a4)
setField _proxy (_, a2, a3, a4) a1 = (a1, a2, a3, a4)
instance ModifyField "snd" (a1, a2, a3, a4) (a1, a2', a3, a4) a2 a2' where
modifyField _proxy f (a1, a2, a3, a4) = (a1, f a2, a3, a4)
setField _proxy (a1, _, a3, a4) a2 = (a1, a2, a3, a4)
instance ModifyField "thd" (a1, a2, a3, a4) (a1, a2, a3', a4) a3 a3' where
modifyField _proxy f (a1, a2, a3, a4) = (a1, a2, f a3, a4)
setField _proxy (a1, a2, _, a4) a3 = (a1, a2, a3, a4)
instance HasField "curry" ((a1, a2, a3, a4) -> r) (a1 -> a2 -> a3 -> a4 -> r)
where
getField _proxy f a1 a2 a3 a4 = f (a1, a2, a3, a4)
type instance FieldType "fst" (a1, a2, a3, a4, a5) = a1
type instance UpdateType "fst" (a1, a2, a3, a4, a5) a1' = (a1', a2, a3, a4, a5)
type instance FieldType "snd" (a1, a2, a3, a4, a5) = a2
type instance UpdateType "snd" (a1, a2, a3, a4, a5) a2' = (a1, a2', a3, a4, a5)
type instance FieldType "thd" (a1, a2, a3, a4, a5) = a3
type instance UpdateType "thd" (a1, a2, a3, a4, a5) a3' = (a1, a2, a3', a4, a5)
type instance FieldType "curry" ((a1, a2, a3, a4, a5) -> r) =
a1 -> a2 -> a3 -> a4 -> a5 -> r
instance HasField "fst" (a1, a2, a3, a4, a5) a1 where
getField _proxy (a1, _, _, _, _) = a1
instance HasField "snd" (a1, a2, a3, a4, a5) a2 where
getField _proxy (_, a2, _, _, _) = a2
instance HasField "thd" (a1, a2, a3, a4, a5) a3 where
getField _proxy (_, _, a3, _, _) = a3
instance ModifyField "fst" (a1, a2, a3, a4, a5) (a1', a2, a3, a4, a5) a1 a1'
where
modifyField _proxy f (a1, a2, a3, a4, a5) = (f a1, a2, a3, a4, a5)
setField _proxy (_, a2, a3, a4, a5) a1 = (a1, a2, a3, a4, a5)
instance
ModifyField "snd" (a1, a2, a3, a4, a5) (a1, a2', a3, a4, a5) a2 a2'
where
modifyField _proxy f (a1, a2, a3, a4, a5) = (a1, f a2, a3, a4, a5)
setField _proxy (a1, _, a3, a4, a5) a2 = (a1, a2, a3, a4, a5)
instance
ModifyField "thd" (a1, a2, a3, a4, a5) (a1, a2, a3', a4, a5) a3 a3'
where
modifyField _proxy f (a1, a2, a3, a4, a5) = (a1, a2, f a3, a4, a5)
setField _proxy (a1, a2, _, a4, a5) a3 = (a1, a2, a3, a4, a5)
instance
HasField "curry" ((a1, a2, a3, a4, a5) -> r)
(a1 -> a2 -> a3 -> a4 -> a5 -> r)
where
getField _proxy f a1 a2 a3 a4 a5 = f (a1, a2, a3, a4, a5)
type instance FieldType "fst" (a1, a2, a3, a4, a5, a6) = a1
type instance UpdateType "fst" (a1, a2, a3, a4, a5, a6) a1' =
(a1', a2, a3, a4, a5, a6)
type instance FieldType "snd" (a1, a2, a3, a4, a5, a6) = a2
type instance UpdateType "snd" (a1, a2, a3, a4, a5, a6) a2' =
(a1, a2', a3, a4, a5, a6)
type instance FieldType "thd" (a1, a2, a3, a4, a5, a6) = a3
type instance UpdateType "thd" (a1, a2, a3, a4, a5, a6) a3' =
(a1, a2, a3', a4, a5, a6)
type instance FieldType "curry" ((a1, a2, a3, a4, a5, a6) -> r) =
a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> r
instance HasField "fst" (a1, a2, a3, a4, a5, a6) a1 where
getField _proxy (a1, _, _, _, _, _) = a1
instance HasField "snd" (a1, a2, a3, a4, a5, a6) a2 where
getField _proxy (_, a2, _, _, _, _) = a2
instance HasField "thd" (a1, a2, a3, a4, a5, a6) a3 where
getField _proxy (_, _, a3, _, _, _) = a3
instance
ModifyField "fst" (a1, a2, a3, a4, a5, a6) (a1', a2, a3, a4, a5, a6) a1 a1'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6) = (f a1, a2, a3, a4, a5, a6)
setField _proxy (_, a2, a3, a4, a5, a6) a1 = (a1, a2, a3, a4, a5, a6)
instance
ModifyField "snd" (a1, a2, a3, a4, a5, a6) (a1, a2', a3, a4, a5, a6) a2 a2'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6) = (a1, f a2, a3, a4, a5, a6)
setField _proxy (a1, _, a3, a4, a5, a6) a2 = (a1, a2, a3, a4, a5, a6)
instance
ModifyField "thd" (a1, a2, a3, a4, a5, a6) (a1, a2, a3', a4, a5, a6) a3 a3'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6) = (a1, a2, f a3, a4, a5, a6)
setField _proxy (a1, a2, _, a4, a5, a6) a3 = (a1, a2, a3, a4, a5, a6)
instance
HasField "curry" ((a1, a2, a3, a4, a5, a6) -> r)
(a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> r)
where
getField _proxy f a1 a2 a3 a4 a5 a6 = f (a1, a2, a3, a4, a5, a6)
type instance FieldType "fst" (a1, a2, a3, a4, a5, a6, a7) = a1
type instance UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7) a1' =
(a1', a2, a3, a4, a5, a6, a7)
type instance FieldType "snd" (a1, a2, a3, a4, a5, a6, a7) = a2
type instance UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7) a2' =
(a1, a2', a3, a4, a5, a6, a7)
type instance FieldType "thd" (a1, a2, a3, a4, a5, a6, a7) = a3
type instance UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7) a3' =
(a1, a2, a3', a4, a5, a6, a7)
type instance FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7) -> r) =
a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> r
instance HasField "fst" (a1, a2, a3, a4, a5, a6, a7) a1 where
getField _proxy (a1, _, _, _, _, _, _) = a1
instance HasField "snd" (a1, a2, a3, a4, a5, a6, a7) a2 where
getField _proxy (_, a2, _, _, _, _, _) = a2
instance HasField "thd" (a1, a2, a3, a4, a5, a6, a7) a3 where
getField _proxy (_, _, a3, _, _, _, _) = a3
instance
ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7)
(a1', a2, a3, a4, a5, a6, a7) a1 a1'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7) =
(f a1, a2, a3, a4, a5, a6, a7)
setField _proxy (_, a2, a3, a4, a5, a6, a7) a1 =
(a1, a2, a3, a4, a5, a6, a7)
instance
ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7)
(a1, a2', a3, a4, a5, a6, a7) a2 a2'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7) =
(a1, f a2, a3, a4, a5, a6, a7)
setField _proxy (a1, _, a3, a4, a5, a6, a7) a2 =
(a1, a2, a3, a4, a5, a6, a7)
instance
ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7)
(a1, a2, a3', a4, a5, a6, a7) a3 a3'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7) =
(a1, a2, f a3, a4, a5, a6, a7)
setField _proxy (a1, a2, _, a4, a5, a6, a7) a3 =
(a1, a2, a3, a4, a5, a6, a7)
instance
HasField "curry" ((a1, a2, a3, a4, a5, a6, a7) -> r)
(a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> r)
where
getField _proxy f a1 a2 a3 a4 a5 a6 a7 = f (a1, a2, a3, a4, a5, a6, a7)
type instance FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8) = a1
type instance UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8) a1' =
(a1', a2, a3, a4, a5, a6, a7, a8)
type instance FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8) = a2
type instance UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8) a2' =
(a1, a2', a3, a4, a5, a6, a7, a8)
type instance FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8) = a3
type instance UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8) a3' =
(a1, a2, a3', a4, a5, a6, a7, a8)
type instance FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8) -> r) =
a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> r
instance HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8) a1 where
getField _proxy (a1, _, _, _, _, _, _, _) = a1
instance HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8) a2 where
getField _proxy (_, a2, _, _, _, _, _, _) = a2
instance HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8) a3 where
getField _proxy (_, _, a3, _, _, _, _, _) = a3
instance
ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8)
(a1', a2, a3, a4, a5, a6, a7, a8) a1 a1'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8) =
(f a1, a2, a3, a4, a5, a6, a7, a8)
setField _proxy (_, a2, a3, a4, a5, a6, a7, a8) a1 =
(a1, a2, a3, a4, a5, a6, a7, a8)
instance
ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8)
(a1, a2', a3, a4, a5, a6, a7, a8) a2 a2'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8) =
(a1, f a2, a3, a4, a5, a6, a7, a8)
setField _proxy (a1, _, a3, a4, a5, a6, a7, a8) a2 =
(a1, a2, a3, a4, a5, a6, a7, a8)
instance
ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8)
(a1, a2, a3', a4, a5, a6, a7, a8) a3 a3'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8) =
(a1, a2, f a3, a4, a5, a6, a7, a8)
setField _proxy (a1, a2, _, a4, a5, a6, a7, a8) a3 =
(a1, a2, a3, a4, a5, a6, a7, a8)
instance
HasField "curry" ((a1, a2, a3, a4, a5, a6, a7, a8) -> r)
(a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> r)
where
getField _proxy f a1 a2 a3 a4 a5 a6 a7 a8 =
f (a1, a2, a3, a4, a5, a6, a7, a8)
type instance FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9) = a1
type instance UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a1' =
(a1', a2, a3, a4, a5, a6, a7, a8, a9)
type instance FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) = a2
type instance UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a2' =
(a1, a2', a3, a4, a5, a6, a7, a8, a9)
type instance FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) = a3
type instance UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a3' =
(a1, a2, a3', a4, a5, a6, a7, a8, a9)
type instance FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9) -> r) =
a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> r
instance HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a1 where
getField _proxy (a1, _, _, _, _, _, _, _, _) = a1
instance HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a2 where
getField _proxy (_, a2, _, _, _, _, _, _, _) = a2
instance HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a3 where
getField _proxy (_, _, a3, _, _, _, _, _, _) = a3
instance
ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9)
(a1', a2, a3, a4, a5, a6, a7, a8, a9) a1 a1'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8, a9) =
(f a1, a2, a3, a4, a5, a6, a7, a8, a9)
setField _proxy (_, a2, a3, a4, a5, a6, a7, a8, a9) a1 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9)
instance
ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9)
(a1, a2', a3, a4, a5, a6, a7, a8, a9) a2 a2'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8, a9) =
(a1, f a2, a3, a4, a5, a6, a7, a8, a9)
setField _proxy (a1, _, a3, a4, a5, a6, a7, a8, a9) a2 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9)
instance
ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9)
(a1, a2, a3', a4, a5, a6, a7, a8, a9) a3 a3'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8, a9) =
(a1, a2, f a3, a4, a5, a6, a7, a8, a9)
setField _proxy (a1, a2, _, a4, a5, a6, a7, a8, a9) a3 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9)
instance
HasField "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9) -> r)
(a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> r)
where
getField _proxy f a1 a2 a3 a4 a5 a6 a7 a8 a9 =
f (a1, a2, a3, a4, a5, a6, a7, a8, a9)
type instance FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) = a1
type instance UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a1' =
(a1', a2, a3, a4, a5, a6, a7, a8, a9, a10)
type instance FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) = a2
type instance UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a2' =
(a1, a2', a3, a4, a5, a6, a7, a8, a9, a10)
type instance FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) = a3
type instance UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a3' =
(a1, a2, a3', a4, a5, a6, a7, a8, a9, a10)
type instance FieldType "curry"
((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> r) =
a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> r
instance HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a1 where
getField _proxy (a1, _, _, _, _, _, _, _, _, _) = a1
instance HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a2 where
getField _proxy (_, a2, _, _, _, _, _, _, _, _) = a2
instance HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a3 where
getField _proxy (_, _, a3, _, _, _, _, _, _, _) = a3
instance
ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
(a1', a2, a3, a4, a5, a6, a7, a8, a9, a10) a1 a1'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) =
(f a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
setField _proxy (_, a2, a3, a4, a5, a6, a7, a8, a9, a10) a1 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
instance
ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
(a1, a2', a3, a4, a5, a6, a7, a8, a9, a10) a2 a2'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) =
(a1, f a2, a3, a4, a5, a6, a7, a8, a9, a10)
setField _proxy (a1, _, a3, a4, a5, a6, a7, a8, a9, a10) a2 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
instance
ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
(a1, a2, a3', a4, a5, a6, a7, a8, a9, a10) a3 a3'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) =
(a1, a2, f a3, a4, a5, a6, a7, a8, a9, a10)
setField _proxy (a1, a2, _, a4, a5, a6, a7, a8, a9, a10) a3 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
instance
HasField "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> r)
(a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> r)
where
getField _proxy f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
type instance FieldType "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) = a1
type instance UpdateType "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a1' =
(a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
type instance FieldType "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) = a2
type instance UpdateType "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a2' =
(a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11)
type instance FieldType "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) = a3
type instance UpdateType "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a3' =
(a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11)
type instance FieldType "curry"
((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> r) =
a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> r
instance HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a1 where
getField _proxy (a1, _, _, _, _, _, _, _, _, _, _) = a1
instance HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a2 where
getField _proxy (_, a2, _, _, _, _, _, _, _, _, _) = a2
instance HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a3 where
getField _proxy (_, _, a3, _, _, _, _, _, _, _, _) = a3
instance
ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
(a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a1 a1'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) =
(f a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
setField _proxy (_, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a1 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
instance
ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
(a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11) a2 a2'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) =
(a1, f a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
setField _proxy (a1, _, a3, a4, a5, a6, a7, a8, a9, a10, a11) a2 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
instance
ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
(a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11) a3 a3'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) =
(a1, a2, f a3, a4, a5, a6, a7, a8, a9, a10, a11)
setField _proxy (a1, a2, _, a4, a5, a6, a7, a8, a9, a10, a11) a3 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
instance
HasField "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> r)
(a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> r)
where
getField _proxy f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
type instance FieldType "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) = a1
type instance UpdateType "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a1' =
(a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
type instance FieldType "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) = a2
type instance UpdateType "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a2' =
(a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
type instance FieldType "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) = a3
type instance UpdateType "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a3' =
(a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12)
type instance FieldType "curry"
((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> r) =
a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12
-> r
instance HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a1
where
getField _proxy (a1, _, _, _, _, _, _, _, _, _, _, _) = a1
instance HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a2
where
getField _proxy (_, a2, _, _, _, _, _, _, _, _, _, _) = a2
instance HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a3
where
getField _proxy (_, _, a3, _, _, _, _, _, _, _, _, _) = a3
instance
ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
(a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a1 a1'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) =
(f a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
setField _proxy (_, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a1 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
instance
ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
(a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a2 a2'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) =
(a1, f a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
setField _proxy (a1, _, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a2 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
instance
ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
(a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12) a3 a3'
where
modifyField _proxy f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) =
(a1, a2, f a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
setField _proxy (a1, a2, _, a4, a5, a6, a7, a8, a9, a10, a11, a12) a3 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
instance
HasField "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> r)
( a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11
-> a12 -> r
)
where
getField _proxy f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
type instance FieldType "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) = a1
type instance UpdateType "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a1' =
(a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
type instance FieldType "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) = a2
type instance UpdateType "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a2' =
(a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
type instance FieldType "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) = a3
type instance UpdateType "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a3' =
(a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
type instance FieldType "curry"
((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> r) =
a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12
-> a13 -> r
instance
HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a1
where
getField _proxy (a1, _, _, _, _, _, _, _, _, _, _, _, _) = a1
instance
HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a2
where
getField _proxy (_, a2, _, _, _, _, _, _, _, _, _, _, _) = a2
instance
HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a3
where
getField _proxy (_, _, a3, _, _, _, _, _, _, _, _, _, _) = a3
instance
ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
(a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a1 a1'
where
modifyField _proxy f
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) =
(f a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
setField _proxy
(_, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a1 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
instance
ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
(a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a2 a2'
where
modifyField _proxy f
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) =
(a1, f a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
setField _proxy
(a1, _, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a2 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
instance
ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
(a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a3 a3'
where
modifyField _proxy f
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) =
(a1, a2, f a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
setField _proxy
(a1, a2, _, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a3 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
instance
HasField "curry"
((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> r)
( a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11
-> a12 -> a13 -> r
)
where
getField _proxy f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
type instance FieldType "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) = a1
type instance UpdateType "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a1' =
(a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
type instance FieldType "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) = a2
type instance UpdateType "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a2' =
(a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
type instance FieldType "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) = a3
type instance UpdateType "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a3' =
(a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
type instance FieldType "curry"
((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> r) =
a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12
-> a13 -> a14 -> r
instance
HasField "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a1
where
getField _proxy (a1, _, _, _, _, _, _, _, _, _, _, _, _, _) = a1
instance
HasField "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a2
where
getField _proxy (_, a2, _, _, _, _, _, _, _, _, _, _, _, _) = a2
instance
HasField "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a3
where
getField _proxy (_, _, a3, _, _, _, _, _, _, _, _, _, _, _) = a3
instance
ModifyField "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
(a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a1 a1'
where
modifyField _proxy f
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) =
(f a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
setField _proxy
(_, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a1 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
instance
ModifyField "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
(a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a2 a2'
where
modifyField _proxy f
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) =
(a1, f a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
setField _proxy
(a1, _, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a2 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
instance
ModifyField "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
(a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a3 a3'
where
modifyField _proxy f
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) =
(a1, a2, f a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
setField _proxy
(a1, a2, _, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a3 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
instance
HasField "curry"
((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> r)
( a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11
-> a12 -> a13 -> a14 -> r
)
where
getField _proxy f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
type instance FieldType "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) = a1
type instance UpdateType "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a1' =
(a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
type instance FieldType "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) = a2
type instance UpdateType "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a2' =
(a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
type instance FieldType "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) = a3
type instance UpdateType "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a3' =
(a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
type instance FieldType "curry"
((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> r) =
a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12
-> a13 -> a14 -> a15 -> r
instance
HasField "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a1
where
getField _proxy (a1, _, _, _, _, _, _, _, _, _, _, _, _, _, _) = a1
instance
HasField "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a2
where
getField _proxy (_, a2, _, _, _, _, _, _, _, _, _, _, _, _, _) = a2
instance
HasField "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a3
where
getField _proxy (_, _, a3, _, _, _, _, _, _, _, _, _, _, _, _) = a3
instance
ModifyField "fst"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
(a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
a1 a1'
where
modifyField _proxy f
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) =
(f a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
setField _proxy
(_, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a1 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
instance
ModifyField "snd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
(a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
a2 a2'
where
modifyField _proxy f
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) =
(a1, f a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
setField _proxy
(a1, _, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a2 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
instance
ModifyField "thd"
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
(a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
a3 a3'
where
modifyField _proxy f
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) =
(a1, a2, f a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
setField _proxy
(a1, a2, _, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a3 =
(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
instance
HasField "curry"
( (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
-> r
)
( a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11
-> a12 -> a13 -> a14 -> a15 -> r
)
where
getField _proxy f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 =
f (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
type instance FieldType "head" [a] = Maybe a
type instance UpdateType "head" [a] (Maybe a) = [a]
instance HasField "head" [a] (Maybe a) where
getField _proxy [] = Nothing
getField _proxy (a : _) = Just a
instance ModifyField "head" [a] [a] (Maybe a) (Maybe a) where
modifyField _proxy f = \case
[] -> case f Nothing of
Nothing -> []
Just a -> [a]
a : as -> case f (Just a) of
Nothing -> as
Just a' -> a' : as
setField _proxy = \case
[] -> \case
Nothing -> []
Just a -> [a]
_ : as -> \case
Nothing -> as
Just a -> a : as
type instance FieldType "tail" [a] = Maybe [a]
type instance UpdateType "tail" [a] (Maybe [a]) = [a]
instance HasField "tail" [a] (Maybe [a]) where
getField _proxy [] = Nothing
getField _proxy (_ : as) = Just as
instance ModifyField "tail" [a] [a] (Maybe [a]) (Maybe [a]) where
modifyField _proxy f = \case
[] -> case f Nothing of
Nothing -> []
Just as -> as
a : as -> case f (Just as) of
Nothing -> [a]
Just as' -> a : as'
setField _proxy = \case
[] -> \case
Nothing -> []
Just as -> as
a : _ -> \case
Nothing -> [a]
Just as -> a : as
#ifdef HAVE_NON_EMPTY_LIST
type instance FieldType "head" (NonEmpty a) = a
type instance UpdateType "head" (NonEmpty a) a = NonEmpty a
instance HasField "head" (NonEmpty a) a where
getField _proxy (a :| _) = a
instance ModifyField "head" (NonEmpty a) (NonEmpty a) a a where
modifyField _proxy f (a :| as) = f a :| as
setField _proxy (_ :| as) a = a :| as
type instance FieldType "tail" (NonEmpty a) = [a]
type instance UpdateType "tail" (NonEmpty a) [a] = NonEmpty a
instance HasField "tail" (NonEmpty a) [a] where
getField _proxy (_ :| as) = as
instance ModifyField "tail" (NonEmpty a) (NonEmpty a) [a] [a] where
modifyField _proxy f (a :| as) = a :| f as
setField _proxy (a :| _) as = a :| as
#endif