Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- data Variant (opts :: [*])
- type family VariantMember a opts where ...
- type VariantPos a opts = VariantPosHelper 1 a opts
- emptyVariant :: Variant '[]
- toVariant :: forall opts a pos. (KnownNat pos, VariantPos a opts ~ pos, VariantMember a opts) => a -> Variant opts
- fromVariant :: forall opts a pos. (KnownNat pos, VariantPos a opts ~ pos, VariantMember a opts) => Variant opts -> Maybe a
- data VariantMatch r ts where
- VariantCase :: (t -> r) -> VariantMatch r ts -> VariantMatch r (t ': ts)
- VariantEnd :: VariantMatch r '[]
- VariantWildCard :: r -> VariantMatch r ts
- class VariantMatcher r opts where
- variantMatch :: Variant opts -> VariantMatch r opts -> r
- shrinkVariant :: Variant (t ': ts) -> Variant ts
- extendVariant :: Variant ts -> Variant (t ': ts)
Documentation
data Variant (opts :: [*]) Source #
A variant is used to express that a values type is of any of the types tracked in the type level list.
Instances
type family VariantMember a opts where ... Source #
VariantMember x (x ': xs) = True ~ True | |
VariantMember x (y ': ys) = VariantMember x ys |
type VariantPos a opts = VariantPosHelper 1 a opts Source #
emptyVariant :: Variant '[] Source #
An empty Variant
, equivalent to `()`
toVariant :: forall opts a pos. (KnownNat pos, VariantPos a opts ~ pos, VariantMember a opts) => a -> Variant opts Source #
fromVariant :: forall opts a pos. (KnownNat pos, VariantPos a opts ~ pos, VariantMember a opts) => Variant opts -> Maybe a Source #
data VariantMatch r ts where Source #
VariantCase :: (t -> r) -> VariantMatch r ts -> VariantMatch r (t ': ts) | |
VariantEnd :: VariantMatch r '[] | |
VariantWildCard :: r -> VariantMatch r ts |
class VariantMatcher r opts where Source #
Pattern matching helper with totality check. Note that the performance of this pattern match is roughly like a normal pattern match. (See benchmarks)
variantMatch :: Variant opts -> VariantMatch r opts -> r Source #
Instances
VariantMatcher r ([] :: [Type]) Source # | |
Defined in SuperRecord.Variant variantMatch :: Variant [] -> VariantMatch r [] -> r Source # | |
VariantMatcher r ts => VariantMatcher r (t ': ts) Source # | |
Defined in SuperRecord.Variant variantMatch :: Variant (t ': ts) -> VariantMatch r (t ': ts) -> r Source # |