generic-data-functions-0.1.1: Familiar functions lifted to generic data types
Safe HaskellSafe-Inferred
LanguageGHC2021

Generic.Data.Function.FoldMap.SumConsByte

Description

foldMap for sum types, where constructors are encoded by index (distance from first/leftmost constructor) in a single byte, which is prepended to their contents.

TODO. Clumsy and limited. And yet, still handy enough I think.

Synopsis

Documentation

class GFoldMapSumConsByte m f where Source #

Methods

gFoldMapSumConsByte :: (Word8 -> m) -> f p -> m Source #

Instances

Instances details
(TypeError ENoEmpty :: Constraint) => GFoldMapSumConsByte m (V1 :: k -> Type) Source # 
Instance details

Defined in Generic.Data.Function.FoldMap.SumConsByte

Methods

gFoldMapSumConsByte :: forall (p :: k0). (Word8 -> m) -> V1 p -> m Source #

(FitsInByte (SumArity (l :+: r)), GFoldMapCSumCtrArityByte m 0 (l :+: r), GFoldMapCSumCtr m (l :+: r), Semigroup m) => GFoldMapSumConsByte m (l :+: r :: Type -> Type) Source # 
Instance details

Defined in Generic.Data.Function.FoldMap.SumConsByte

Methods

gFoldMapSumConsByte :: forall (p :: k). (Word8 -> m) -> (l :+: r) p -> m Source #

(TypeError EUnexpectedNonSum :: Constraint) => GFoldMapSumConsByte m (C1 c f :: k -> Type) Source # 
Instance details

Defined in Generic.Data.Function.FoldMap.SumConsByte

Methods

gFoldMapSumConsByte :: forall (p :: k0). (Word8 -> m) -> C1 c f p -> m Source #

GFoldMapSumConsByte m f => GFoldMapSumConsByte m (D1 c f :: k -> Type) Source # 
Instance details

Defined in Generic.Data.Function.FoldMap.SumConsByte

Methods

gFoldMapSumConsByte :: forall (p :: k0). (Word8 -> m) -> D1 c f p -> m Source #

class GFoldMapCSumCtr m f where Source #

Sum type handler handling constructors only. Useful if you handle constructor prefixes elsewhere.

Methods

gFoldMapCSumCtr :: f p -> m Source #

Instances

Instances details
(GFoldMapCSumCtr m l, GFoldMapCSumCtr m r) => GFoldMapCSumCtr m (l :+: r :: k -> Type) Source # 
Instance details

Defined in Generic.Data.Function.FoldMap.SumConsByte

Methods

gFoldMapCSumCtr :: forall (p :: k0). (l :+: r) p -> m Source #

GFoldMapC m f => GFoldMapCSumCtr m (C1 c f :: k -> Type) Source # 
Instance details

Defined in Generic.Data.Function.FoldMap.SumConsByte

Methods

gFoldMapCSumCtr :: forall (p :: k0). C1 c f p -> m Source #

class GFoldMapCSumCtrArityByte m (arity :: Natural) f where Source #

Methods

gFoldMapCSumCtrArityByte :: (Word8 -> m) -> f p -> m Source #

Instances

Instances details
(GFoldMapCSumCtrArityByte m arity l, GFoldMapCSumCtrArityByte m (arity + SumArity l) r) => GFoldMapCSumCtrArityByte m arity (l :+: r :: Type -> Type) Source # 
Instance details

Defined in Generic.Data.Function.FoldMap.SumConsByte

Methods

gFoldMapCSumCtrArityByte :: forall (p :: k). (Word8 -> m) -> (l :+: r) p -> m Source #

KnownNat arity => GFoldMapCSumCtrArityByte m arity (C1 c f :: k -> Type) Source # 
Instance details

Defined in Generic.Data.Function.FoldMap.SumConsByte

Methods

gFoldMapCSumCtrArityByte :: forall (p :: k0). (Word8 -> m) -> C1 c f p -> m Source #

type family SumArity (a :: Type -> Type) :: Natural where ... Source #

Equations

SumArity (C1 c a) = 1 
SumArity (x :+: y) = SumArity x + SumArity y 

type family FitsInByteResult (b :: Bool) :: Constraint where ... Source #

Equations

FitsInByteResult 'True = () 
FitsInByteResult 'False = TypeErrorMessage "TODO ya type had more than 255 constructors" 

type family TypeErrorMessage (a :: Symbol) :: Constraint where ... Source #

Equations

TypeErrorMessage a = TypeError ('Text a)