Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
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
- class GFoldMapSumConsByte m f where
- gFoldMapSumConsByte :: (Word8 -> m) -> f p -> m
- class GFoldMapCSumCtr m f where
- gFoldMapCSumCtr :: f p -> m
- class GFoldMapCSumCtrArityByte m (arity :: Natural) f where
- gFoldMapCSumCtrArityByte :: (Word8 -> m) -> f p -> m
- type family SumArity (a :: Type -> Type) :: Natural where ...
- type FitsInByte n = FitsInByteResult (n <=? 255)
- type family FitsInByteResult (b :: Bool) :: Constraint where ...
- type family TypeErrorMessage (a :: Symbol) :: Constraint where ...
Documentation
class GFoldMapSumConsByte m f where Source #
gFoldMapSumConsByte :: (Word8 -> m) -> f p -> m Source #
Instances
(TypeError ENoEmpty :: Constraint) => GFoldMapSumConsByte m (V1 :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.SumConsByte 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 # | |
Defined in Generic.Data.Function.FoldMap.SumConsByte gFoldMapSumConsByte :: forall (p :: k). (Word8 -> m) -> (l :+: r) p -> m Source # | |
(TypeError EUnexpectedNonSum :: Constraint) => GFoldMapSumConsByte m (C1 c f :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.SumConsByte gFoldMapSumConsByte :: forall (p :: k0). (Word8 -> m) -> C1 c f p -> m Source # | |
GFoldMapSumConsByte m f => GFoldMapSumConsByte m (D1 c f :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.SumConsByte 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.
gFoldMapCSumCtr :: f p -> m Source #
Instances
(GFoldMapCSumCtr m l, GFoldMapCSumCtr m r) => GFoldMapCSumCtr m (l :+: r :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.SumConsByte gFoldMapCSumCtr :: forall (p :: k0). (l :+: r) p -> m Source # | |
GFoldMapC m f => GFoldMapCSumCtr m (C1 c f :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.SumConsByte gFoldMapCSumCtr :: forall (p :: k0). C1 c f p -> m Source # |
class GFoldMapCSumCtrArityByte m (arity :: Natural) f where Source #
gFoldMapCSumCtrArityByte :: (Word8 -> m) -> f p -> m Source #
Instances
(GFoldMapCSumCtrArityByte m arity l, GFoldMapCSumCtrArityByte m (arity + SumArity l) r) => GFoldMapCSumCtrArityByte m arity (l :+: r :: Type -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.SumConsByte gFoldMapCSumCtrArityByte :: forall (p :: k). (Word8 -> m) -> (l :+: r) p -> m Source # | |
KnownNat arity => GFoldMapCSumCtrArityByte m arity (C1 c f :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.SumConsByte gFoldMapCSumCtrArityByte :: forall (p :: k0). (Word8 -> m) -> C1 c f p -> m Source # |
type FitsInByte n = FitsInByteResult (n <=? 255) Source #
type family FitsInByteResult (b :: Bool) :: Constraint where ... Source #
FitsInByteResult 'True = () | |
FitsInByteResult 'False = TypeErrorMessage "TODO ya type had more than 255 constructors" |
type family TypeErrorMessage (a :: Symbol) :: Constraint where ... Source #
TypeErrorMessage a = TypeError ('Text a) |