Safe Haskell | None |
---|---|
Language | Haskell2010 |
This is the internal generic-override API and should be considered
unstable and subject to change. This module is exposed for library integrators
(e.g. generic-override-aeson). In general, unless you are integrating
some type class with generic-override, you should prefer to use the
public, stable API provided by 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 :: * -> *)
- newtype Overridden (ms :: Maybe Symbol) a (xs :: [*]) = Overridden a
- unOverridden :: Overridden ms a xs -> a
- overridden :: forall a (ms :: Maybe Symbol) (xs :: [*]) proxy0 proxy1. a -> proxy0 ms -> proxy1 xs -> Overridden ms a xs
- class GOverride (xs :: [*]) (f :: * -> *) where
- type OverrideRep xs f :: * -> *
- overrideFrom :: f x -> OverrideRep xs f x
- overrideTo :: OverrideRep xs f x -> f x
- type family Using (ms :: Maybe Symbol) (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), Monoid (Rep (Override a xs) ())) => Monoid (Override a xs) | |
(Generic (Override a xs), Semigroup (Rep (Override a xs) ())) => Semigroup (Override a xs) | |
(Generic a, GOverride xs (Rep a)) => Generic (Override a xs) Source # | |
(Generic (Override a xs), Eq (Rep (Override a xs) ())) => Eq (Override a xs) | |
(Generic (Override a xs), Ord (Rep (Override a xs) ())) => Ord (Override a xs) | |
Defined in Data.Override.Instances | |
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 be either a type (kind *
) or a type-level string
(kind Symbol
).
data With (o :: k) (w :: * -> *) Source #
Used to wrap a field into a something of kind * -> *
, for example another newtype.
newtype Overridden (ms :: Maybe Symbol) a (xs :: [*]) Source #
Used at the leaf nodes of a generic Rep
Instances
(Coercible a (Using ms a xs), Monoid (Using ms a xs)) => Monoid (Overridden ms a xs) | |
Defined in Data.Override.Instances mempty :: Overridden ms a xs mappend :: Overridden ms a xs -> Overridden ms a xs -> Overridden ms a xs mconcat :: [Overridden ms a xs] -> Overridden ms a xs | |
(Coercible a (Using ms a xs), Semigroup (Using ms a xs)) => Semigroup (Overridden ms a xs) | |
Defined in Data.Override.Instances (<>) :: Overridden ms a xs -> Overridden ms a xs -> Overridden ms a xs sconcat :: NonEmpty (Overridden ms a xs) -> Overridden ms a xs stimes :: Integral b => b -> Overridden ms a xs -> Overridden ms a xs | |
(Coercible a (Using ms a xs), Eq (Using ms a xs)) => Eq (Overridden ms a xs) | |
Defined in Data.Override.Instances (==) :: Overridden ms a xs -> Overridden ms a xs -> Bool (/=) :: Overridden ms a xs -> Overridden ms a xs -> Bool | |
(Coercible a (Using ms a xs), Ord (Using ms a xs)) => Ord (Overridden ms a xs) | |
Defined in Data.Override.Instances compare :: Overridden ms a xs -> Overridden ms a xs -> Ordering (<) :: Overridden ms a xs -> Overridden ms a xs -> Bool (<=) :: Overridden ms a xs -> Overridden ms a xs -> Bool (>) :: Overridden ms a xs -> Overridden ms a xs -> Bool (>=) :: Overridden ms a xs -> Overridden ms a xs -> Bool max :: Overridden ms a xs -> Overridden ms a xs -> Overridden ms a xs min :: Overridden ms a xs -> Overridden ms a xs -> Overridden ms a xs |
unOverridden :: Overridden ms a xs -> a Source #
Unwrap an Overridden
value.
overridden :: forall a (ms :: Maybe Symbol) (xs :: [*]) proxy0 proxy1. a -> proxy0 ms -> proxy1 xs -> Overridden ms a xs Source #
Same as override
but for Overridden
types.
class GOverride (xs :: [*]) (f :: * -> *) where Source #
Type class used to build the Generic
instance for Override
.
type OverrideRep xs f :: * -> * Source #
Analogous to Rep
; rewrites the type for a given Rep
and injects
Overridden
at the leaves.
overrideFrom :: f x -> OverrideRep xs f x Source #
overrideTo :: OverrideRep xs f x -> f x Source #
Instances
GOverride xs (U1 :: Type -> Type) Source # | |
Defined in Data.Override.Internal type OverrideRep xs U1 :: Type -> Type Source # overrideFrom :: U1 x -> OverrideRep xs U1 x Source # overrideTo :: OverrideRep xs U1 x -> U1 x Source # | |
(GOverride xs f, GOverride xs g) => GOverride xs (f :*: g) Source # | |
Defined in Data.Override.Internal type OverrideRep xs (f :*: g) :: Type -> Type Source # overrideFrom :: (f :*: g) x -> OverrideRep xs (f :*: g) x Source # overrideTo :: OverrideRep xs (f :*: g) x -> (f :*: g) x Source # | |
(GOverride xs f, GOverride xs g) => GOverride xs (f :+: g) Source # | |
Defined in Data.Override.Internal type OverrideRep xs (f :+: g) :: Type -> Type Source # overrideFrom :: (f :+: g) x -> OverrideRep xs (f :+: g) x Source # overrideTo :: OverrideRep xs (f :+: g) x -> (f :+: g) x Source # | |
GOverride xs f => GOverride xs (M1 C c f) Source # | |
Defined in Data.Override.Internal type OverrideRep xs (M1 C c f) :: Type -> Type Source # overrideFrom :: M1 C c f x -> OverrideRep xs (M1 C c f) x Source # overrideTo :: OverrideRep xs (M1 C c f) x -> M1 C c f x Source # | |
GOverride xs f => GOverride xs (M1 D c f) Source # | |
Defined in Data.Override.Internal type OverrideRep xs (M1 D c f) :: Type -> Type Source # overrideFrom :: M1 D c f x -> OverrideRep xs (M1 D c f) x Source # overrideTo :: OverrideRep xs (M1 D c f) x -> M1 D c f x Source # | |
GOverride xs (M1 S ('MetaSel ms su ss ds) (K1 R c :: Type -> Type)) Source # | |
Defined in Data.Override.Internal type OverrideRep xs (M1 S ('MetaSel ms su ss ds) (K1 R c)) :: Type -> Type Source # overrideFrom :: M1 S ('MetaSel ms su ss ds) (K1 R c) x -> OverrideRep xs (M1 S ('MetaSel ms su ss ds) (K1 R c)) x Source # overrideTo :: OverrideRep xs (M1 S ('MetaSel ms su ss ds) (K1 R c)) x -> M1 S ('MetaSel ms su ss ds) (K1 R c) x Source # |
type family Using (ms :: Maybe Symbol) (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 ms a '[] = a | |
Using ('Just o) a (As o n ': xs) = n | |
Using ('Just o) a (With o w ': xs) = w a | |
Using ms a (As a n ': xs) = n | |
Using ms a (With a w ': xs) = w a | |
Using ms (f a0) (As f g ': xs) = g a0 | |
Using ms (f a0 a1) (As f g ': xs) = g a0 a1 | |
Using ms (f a0 a1 a2) (As f g ': xs) = g a0 a1 a2 | |
Using ms (f a0 a1 a2 a3) (As f g ': xs) = g a0 a1 a2 a3 | |
Using ms (f a0 a1 a2 a3 a4) (As f g ': xs) = g a0 a1 a2 a3 a4 | |
Using ms (f a0 a1 a2 a3 a4 a5) (As f g ': xs) = g a0 a1 a2 a3 a4 a5 | |
Using ms (f a0 a1 a2 a3 a4 a5 a6) (As f g ': xs) = g a0 a1 a2 a3 a4 a5 a6 | |
Using ms (f a0 a1 a2 a3 a4 a5 a6 a7) (As f g ': xs) = g a0 a1 a2 a3 a4 a5 a6 a7 | |
Using ms (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 ms (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 ms a (x ': xs) = Using ms a xs |