Data.Variant
- Package
- purescript-variant
- Repository
- natefaubion/purescript-variant
#Variant Source
data Variant :: Row Type -> TypeInstances
(RowToList r rl, VariantTags rl, VariantEqs rl) => Eq (Variant r)(RowToList r rl, VariantTags rl, VariantEqs rl, VariantOrds rl) => Ord (Variant r)(RowToList r rl, VariantTags rl, VariantShows rl) => Show (Variant r)
#case_ Source
case_ :: forall a. Variant () -> aCombinator for exhaustive pattern matching.
caseFn :: Variant (foo :: Int, bar :: String, baz :: Boolean) -> String
caseFn = case_
# on (SProxy :: SProxy "foo") (\foo -> "Foo: " <> show foo)
# on (SProxy :: SProxy "bar") (\bar -> "Bar: " <> bar)
# on (SProxy :: SProxy "baz") (\baz -> "Baz: " <> show baz)
#default Source
default :: forall r a. a -> Variant r -> aCombinator for partial matching with a default value in case of failure.
caseFn :: forall r. Variant (foo :: Int, bar :: String | r) -> String
caseFn = default "No match"
# on (SProxy :: SProxy "foo") (\foo -> "Foo: " <> show foo)
# on (SProxy :: SProxy "bar") (\bar -> "Bar: " <> bar)
#match Source
match :: forall result record variant. VariantRecordMatching variant record result => Record record -> Variant variant -> resultMatch a variant with a record containing methods to handle each case
to produce a result.
This means that if variant contains a row of type a, a row with the
same label must have type a -> result in record, where result is the
same type for every row of record.
Polymorphic methods in record may create problems with the type system
if the polymorphism is not fully generalized to the whole record type
or if not all polymorphic variables are specified in usage. When in doubt,
label methods with specific types, such as show :: Int -> String, or
give the whole record an appropriate type.
#contract Source
contract :: forall f gt lt. Alternative f => Contractable gt lt => Variant gt -> f (Variant lt)A Variant gt can be cast to some Variant lt, where lt is is a subset
of gt, as long as there is proof that the Variant's runtime tag is
within the subset of lt.
#VariantEqs Source
class VariantEqs (rl :: RowList) whereMembers
variantEqs :: RLProxy rl -> List (VariantCase -> VariantCase -> Boolean)
Instances
VariantEqs Nil(VariantEqs rs, Eq a) => VariantEqs (Cons sym a rs)
#VariantOrds Source
class VariantOrds (rl :: RowList) whereMembers
variantOrds :: RLProxy rl -> List (VariantCase -> VariantCase -> Ordering)
Instances
VariantOrds Nil(VariantOrds rs, Ord a) => VariantOrds (Cons sym a rs)
#VariantShows Source
class VariantShows (rl :: RowList) whereMembers
variantShows :: RLProxy rl -> List (VariantCase -> String)
Instances
VariantShows Nil(VariantShows rs, Show a) => VariantShows (Cons sym a rs)
Re-exports from Data.Symbol
Re-exports from Data.Variant.Internal
#Contractable Source
class Contractable gt lt Instances
(RowToList lt ltl, Union lt a gt, VariantTags ltl) => Contractable gt lt