Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
Generically derive CBLen
type family instances.
A type having a valid CBLen
instance usually indicates one of the following:
- it's a primitive, or extremely simple
- it holds size information in its type
- it's constructed from other constant byte length types
The first two cases must be handled manually. The third case is where Haskell generics excel, and the one this module targets.
You can (attempt to) derive a CBLen
type family instance generically for a
type via
instance IsCBLen a where type CBLen a = CBLenGeneric w a
As with deriving BLen
generically, you must provide the type used to store the
sum tag for sum types.
Then try using it. Hopefully it works, or you get a useful type error. If not, sorry. I don't have much faith in this code.
Synopsis
- type CBLenGeneric (w :: Type) a = GCBLen w (Rep a)
- type CBLenGenericNonSum a = CBLenGeneric (GAssertErrorSum a) a
- type family GCBLen w (f :: k -> Type) :: Natural where ...
- type family GCBLenSum w (f :: k -> Type) where ...
- type family MaybeEq a b where ...
- type family GCBLenCaseMaybe a where ...
- data JustX a b
- data NothingX
Documentation
type CBLenGenericNonSum a = CBLenGeneric (GAssertErrorSum a) a Source #
type family GCBLenCaseMaybe a where ... Source #
I don't know how to pattern match in types without writing type families.
GCBLenCaseMaybe (JustX n _) = n | |
GCBLenCaseMaybe NothingX = TypeError ('Text "Two constructors didn't have equal constant size." ':$$: 'Text "Sry dunno how to thread errors thru LOL") |