generic-override-0.4.0.0: Provides functionality for overriding instances for generic derivation
Safe HaskellNone
LanguageHaskell2010

Data.Override.Internal

Description

This is the internal generic-override API and should be considered unstable and subject to change. In general, you should prefer to use the public, stable API provided by Data.Override.

Synopsis

Documentation

newtype Override a (xs :: [*]) Source #

The feature of this library. For use with DerivingVia. Apply it to a type a and supply a type-level list of instance overrides xs.

Constructors

Override a 

Instances

Instances details
(Generic (Override a xs), Eq (Rep (Override a xs) ())) => Eq (Override a xs) Source # 
Instance details

Defined in Data.Override.Instances

Methods

(==) :: Override a xs -> Override a xs -> Bool #

(/=) :: Override a xs -> Override a xs -> Bool #

(Generic (Override a xs), Ord (Rep (Override a xs) ())) => Ord (Override a xs) Source # 
Instance details

Defined in Data.Override.Instances

Methods

compare :: Override a xs -> Override a xs -> Ordering #

(<) :: Override a xs -> Override a xs -> Bool #

(<=) :: Override a xs -> Override a xs -> Bool #

(>) :: Override a xs -> Override a xs -> Bool #

(>=) :: Override a xs -> Override a xs -> Bool #

max :: Override a xs -> Override a xs -> Override a xs #

min :: Override a xs -> Override a xs -> Override a xs #

(Generic a, GOverride xs (Rep a)) => Generic (Override a xs) Source # 
Instance details

Defined in Data.Override.Internal

Associated Types

type Rep (Override a xs) :: Type -> Type #

Methods

from :: Override a xs -> Rep (Override a xs) x #

to :: Rep (Override a xs) x -> Override a xs #

(Generic (Override a xs), Semigroup (Rep (Override a xs) ())) => Semigroup (Override a xs) Source # 
Instance details

Defined in Data.Override.Instances

Methods

(<>) :: Override a xs -> Override a xs -> Override a xs #

sconcat :: NonEmpty (Override a xs) -> Override a xs #

stimes :: Integral b => b -> Override a xs -> Override a xs #

(Generic (Override a xs), Monoid (Rep (Override a xs) ())) => Monoid (Override a xs) Source # 
Instance details

Defined in Data.Override.Instances

Methods

mempty :: Override a xs #

mappend :: Override a xs -> Override a xs -> Override a xs #

mconcat :: [Override a xs] -> Override a xs #

type Rep (Override a xs) Source # 
Instance details

Defined in Data.Override.Internal

type Rep (Override a xs) = OverrideRep EmptyInspect xs (Rep a)

unOverride :: Override a xs -> a Source #

Unwrap an Override value.

override :: a -> proxy xs -> Override a xs Source #

Construct an Override using a proxy of overrides.

data As (o :: k) n Source #

Used to construct a type-level override. Usually used infix. The o should target either the type to override or the field name as a Symbol to override.

If specifying a type, it can be one of no arity (e.g. Int) or one with arity (e.g. Either) up to 10 type parameters. When specifying a type, the o and n types should have the same kind; otherwise, the rule will not match.

data With (o :: k) (w :: * -> *) Source #

Used to wrap a field into a something of kind * -> *, for example another newtype.

data At (c :: Symbol) (p :: Nat) (n :: *) Source #

Used to construct a type-level override for the given constructor name c and parameter index p.

type GOverride = GOverride' EmptyInspect Source #

Shorthand for the starting point of GOverride'.

You generally shouldn't need this. If GHC asks you to add it as a constraint, prefer using the instance Generic (Override a xs) instead, which may require MonoLocalBinds.

class GOverride' (i :: Inspect) (xs :: [*]) (f :: * -> *) where Source #

Type class used to build the Generic instance for Override.

You generally shouldn't need this. If GHC asks you to add it as a constraint, prefer using the instance Generic (Override a xs) instead, which may require MonoLocalBinds.

Associated Types

type OverrideRep i xs f :: * -> * Source #

Methods

overrideFrom :: f x -> OverrideRep i xs f x Source #

overrideTo :: OverrideRep i xs f x -> f x Source #

Instances

Instances details
GOverride' i xs (U1 :: Type -> Type) Source # 
Instance details

Defined in Data.Override.Internal

Associated Types

type OverrideRep i xs U1 :: Type -> Type Source #

Methods

overrideFrom :: U1 x -> OverrideRep i xs U1 x Source #

overrideTo :: OverrideRep i xs U1 x -> U1 x Source #

(GOverride' i xs f, GOverride' i xs g) => GOverride' i xs (f :+: g) Source # 
Instance details

Defined in Data.Override.Internal

Associated Types

type OverrideRep i xs (f :+: g) :: Type -> Type Source #

Methods

overrideFrom :: (f :+: g) x -> OverrideRep i xs (f :+: g) x Source #

overrideTo :: OverrideRep i xs (f :+: g) x -> (f :+: g) x Source #

GOverride' i xs f => GOverride' i xs (M1 D c f) Source # 
Instance details

Defined in Data.Override.Internal

Associated Types

type OverrideRep i xs (M1 D c f) :: Type -> Type Source #

Methods

overrideFrom :: M1 D c f x -> OverrideRep i xs (M1 D c f) x Source #

overrideTo :: OverrideRep i xs (M1 D c f) x -> M1 D c f x Source #

Coercible a (Using ('Inspect mc ms ('Just p)) a xs) => GOverride' ('Inspect mc ms ('Just p)) xs (K1 R a :: Type -> Type) Source # 
Instance details

Defined in Data.Override.Internal

Associated Types

type OverrideRep ('Inspect mc ms ('Just p)) xs (K1 R a) :: Type -> Type Source #

Methods

overrideFrom :: K1 R a x -> OverrideRep ('Inspect mc ms ('Just p)) xs (K1 R a) x Source #

overrideTo :: OverrideRep ('Inspect mc ms ('Just p)) xs (K1 R a) x -> K1 R a x Source #

Coercible a (Using ('Inspect mc ms ('Just 0)) a xs) => GOverride' ('Inspect mc ms ('Nothing :: Maybe Nat)) xs (K1 R a :: Type -> Type) Source # 
Instance details

Defined in Data.Override.Internal

Associated Types

type OverrideRep ('Inspect mc ms 'Nothing) xs (K1 R a) :: Type -> Type Source #

Methods

overrideFrom :: K1 R a x -> OverrideRep ('Inspect mc ms 'Nothing) xs (K1 R a) x Source #

overrideTo :: OverrideRep ('Inspect mc ms 'Nothing) xs (K1 R a) x -> K1 R a x Source #

(GOverride' ('Inspect mc ms ('Just p)) xs f, GOverride' ('Inspect mc ms ('Just (p + 1))) xs g) => GOverride' ('Inspect mc ms ('Just p)) xs (f :*: g) Source # 
Instance details

Defined in Data.Override.Internal

Associated Types

type OverrideRep ('Inspect mc ms ('Just p)) xs (f :*: g) :: Type -> Type Source #

Methods

overrideFrom :: (f :*: g) x -> OverrideRep ('Inspect mc ms ('Just p)) xs (f :*: g) x Source #

overrideTo :: OverrideRep ('Inspect mc ms ('Just p)) xs (f :*: g) x -> (f :*: g) x Source #

(GOverride' ('Inspect mc ms ('Just 0)) xs f, GOverride' ('Inspect mc ms ('Just 1)) xs g) => GOverride' ('Inspect mc ms ('Nothing :: Maybe Nat)) xs (f :*: g) Source # 
Instance details

Defined in Data.Override.Internal

Associated Types

type OverrideRep ('Inspect mc ms 'Nothing) xs (f :*: g) :: Type -> Type Source #

Methods

overrideFrom :: (f :*: g) x -> OverrideRep ('Inspect mc ms 'Nothing) xs (f :*: g) x Source #

overrideTo :: OverrideRep ('Inspect mc ms 'Nothing) xs (f :*: g) x -> (f :*: g) x Source #

GOverride' ('Inspect mc selName mp) xs f => GOverride' ('Inspect mc ignore mp) xs (M1 S ('MetaSel selName selSU selSS selDS) f) Source # 
Instance details

Defined in Data.Override.Internal

Associated Types

type OverrideRep ('Inspect mc ignore mp) xs (M1 S ('MetaSel selName selSU selSS selDS) f) :: Type -> Type Source #

Methods

overrideFrom :: M1 S ('MetaSel selName selSU selSS selDS) f x -> OverrideRep ('Inspect mc ignore mp) xs (M1 S ('MetaSel selName selSU selSS selDS) f) x Source #

overrideTo :: OverrideRep ('Inspect mc ignore mp) xs (M1 S ('MetaSel selName selSU selSS selDS) f) x -> M1 S ('MetaSel selName selSU selSS selDS) f x Source #

GOverride' ('Inspect ('Just conName) ms mp) xs f => GOverride' ('Inspect ignore ms mp) xs (M1 C ('MetaCons conName conFixity conIsRecord) f) Source # 
Instance details

Defined in Data.Override.Internal

Associated Types

type OverrideRep ('Inspect ignore ms mp) xs (M1 C ('MetaCons conName conFixity conIsRecord) f) :: Type -> Type Source #

Methods

overrideFrom :: M1 C ('MetaCons conName conFixity conIsRecord) f x -> OverrideRep ('Inspect ignore ms mp) xs (M1 C ('MetaCons conName conFixity conIsRecord) f) x Source #

overrideTo :: OverrideRep ('Inspect ignore ms mp) xs (M1 C ('MetaCons conName conFixity conIsRecord) f) x -> M1 C ('MetaCons conName conFixity conIsRecord) f x Source #

data Inspect Source #

Constructors

Inspect 

Fields

type family Using (i :: Inspect) (a :: *) (xs :: [*]) where ... Source #

Type family used to determine which override from xs to replace a with, if any. The ms holds the field name for a, if applicable.

Equations

Using i a '[] = a 
Using ('Inspect mc ('Just o) mp) a (As o n ': xs) = n 
Using ('Inspect mc ('Just o) mp) a (With o w ': xs) = w a 
Using i a (With a w ': xs) = w a 
Using i a (As a n ': xs) = n 
Using i (f a0) (As f g ': xs) = g a0 
Using i (f a0 a1) (As f g ': xs) = g a0 a1 
Using i (f a0 a1 a2) (As f g ': xs) = g a0 a1 a2 
Using i (f a0 a1 a2 a3) (As f g ': xs) = g a0 a1 a2 a3 
Using i (f a0 a1 a2 a3 a4) (As f g ': xs) = g a0 a1 a2 a3 a4 
Using i (f a0 a1 a2 a3 a4 a5) (As f g ': xs) = g a0 a1 a2 a3 a4 a5 
Using i (f a0 a1 a2 a3 a4 a5 a6) (As f g ': xs) = g a0 a1 a2 a3 a4 a5 a6 
Using i (f a0 a1 a2 a3 a4 a5 a6 a7) (As f g ': xs) = g a0 a1 a2 a3 a4 a5 a6 a7 
Using i (f a0 a1 a2 a3 a4 a5 a6 a7 a8) (As f g ': xs) = g a0 a1 a2 a3 a4 a5 a6 a7 a8 
Using i (f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9) (As f g ': xs) = g a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 
Using ('Inspect ('Just c) ms ('Just p)) a (At c p n ': xs) = n 
Using i a (x ': xs) = Using i a xs