Safe Haskell | None |
---|---|
Language | Haskell2010 |
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
- newtype Override a (xs :: [*]) = Override a
- unOverride :: Override a xs -> a
- override :: a -> proxy xs -> Override a xs
- data As (o :: k) n
- data With (o :: k) (w :: * -> *)
- data At (c :: Symbol) (p :: Nat) (n :: *)
- type GOverride = GOverride' EmptyInspect
- class GOverride' (i :: Inspect) (xs :: [*]) (f :: * -> *) where
- type OverrideRep i xs f :: * -> *
- overrideFrom :: f x -> OverrideRep i xs f x
- overrideTo :: OverrideRep i xs f x -> f x
- data Inspect = Inspect (Maybe Symbol) (Maybe Symbol) (Maybe Nat)
- type EmptyInspect = 'Inspect 'Nothing 'Nothing 'Nothing
- type family Using (i :: Inspect) (a :: *) (xs :: [*]) where ...
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
.
Override a |
Instances
(Generic (Override a xs), Eq (Rep (Override a xs) ())) => Eq (Override a xs) Source # | |
(Generic (Override a xs), Ord (Rep (Override a xs) ())) => Ord (Override a xs) Source # | |
Defined in Data.Override.Instances 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 # | |
(Generic a, GOverride xs (Rep a)) => Generic (Override a xs) Source # | |
(Generic (Override a xs), Semigroup (Rep (Override a xs) ())) => Semigroup (Override a xs) Source # | |
(Generic (Override a xs), Monoid (Rep (Override a xs) ())) => Monoid (Override a xs) Source # | |
type Rep (Override a xs) Source # | |
Defined in Data.Override.Internal |
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.
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
.
type OverrideRep i xs f :: * -> * Source #
overrideFrom :: f x -> OverrideRep i xs f x Source #
overrideTo :: OverrideRep i xs f x -> f x Source #
Instances
GOverride' i xs (U1 :: Type -> Type) Source # | |
Defined in Data.Override.Internal 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 # | |
Defined in Data.Override.Internal 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 # | |
Defined in Data.Override.Internal 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 # | |
Defined in Data.Override.Internal 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 # | |
Defined in Data.Override.Internal 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 # | |
Defined in Data.Override.Internal 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 # | |
Defined in Data.Override.Internal 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 # | |
Defined in Data.Override.Internal type OverrideRep ('Inspect mc ignore mp) xs (M1 S ('MetaSel selName selSU selSS selDS) f) :: Type -> Type Source # 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 # | |
Defined in Data.Override.Internal type OverrideRep ('Inspect ignore ms mp) xs (M1 C ('MetaCons conName conFixity conIsRecord) f) :: Type -> Type Source # 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 # |
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.
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 |