Data.Variant
- Package
- 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, VariantBounded rl) => Bounded (Variant r)(RowToList r rl, VariantTags rl, VariantEqs rl, VariantOrds rl, VariantBoundedEnums rl) => Enum (Variant r)(RowToList r rl, VariantTags rl, VariantEqs rl, VariantOrds rl, VariantBoundedEnums rl) => BoundedEnum (Variant r)(RowToList r rl, VariantTags rl, VariantEqs rl, VariantOrds rl) => Ord (Variant r)(RowToList r rl, VariantTags rl, VariantShows rl) => Show (Variant r)
#prj Source
prj :: forall proxy sym a r1 r2 f. Cons sym a r1 r2 => IsSymbol sym => Alternative f => proxy sym -> Variant r2 -> f aAttempt to read a variant at a given label.
case prj (Proxy :: Proxy "foo") intAtFoo of
Just i -> i + 1
Nothing -> 0
#onMatch Source
onMatch :: forall rl r r1 r2 r3 b. RowToList r rl => VariantMatchCases rl r1 b => Union r1 r2 r3 => Record r -> (Variant r2 -> b) -> Variant r3 -> bMatch a Variant with a Record containing functions for handling cases.
This is similar to on, except instead of providing a single label and
handler, you can provide a record where each field maps to a particular
Variant case.
onMatch
{ foo: \foo -> "Foo: " <> foo
, bar: \bar -> "Bar: " <> bar
}
Polymorphic functions in records (such as show or id) can lead
to inference issues 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.
#case_ Source
case_ :: forall a. Variant () -> aCombinator for exhaustive pattern matching.
caseFn :: Variant (foo :: Int, bar :: String, baz :: Boolean) -> String
caseFn = case_
# on (Proxy :: Proxy "foo") (\foo -> "Foo: " <> show foo)
# on (Proxy :: Proxy "bar") (\bar -> "Bar: " <> bar)
# on (Proxy :: Proxy "baz") (\baz -> "Baz: " <> show baz)
#match Source
match :: forall rl r r1 r2 b. RowToList r rl => VariantMatchCases rl r1 b => Union r1 () r2 => Record r -> Variant r2 -> bCombinator for exhaustive pattern matching using an onMatch case record.
matchFn :: Variant (foo :: Int, bar :: String, baz :: Boolean) -> String
matchFn = match
{ foo: \foo -> "Foo: " <> show foo
, bar: \bar -> "Bar: " <> bar
, baz: \baz -> "Baz: " <> show baz
}
#default Source
default :: forall a r. 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 (Proxy :: Proxy "foo") (\foo -> "Foo: " <> show foo)
# on (Proxy :: Proxy "bar") (\bar -> "Bar: " <> bar)
#contract Source
contract :: forall lt gt f. 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.
#Unvariant' Source
type Unvariant' :: Row Type -> Type -> Typetype Unvariant' r x = forall proxy s t o. IsSymbol s => Cons s t o r => proxy s -> t -> x
#VariantEqs Source
class VariantEqs :: RowList Type -> Constraintclass VariantEqs rl where
Members
variantEqs :: forall proxy. proxy rl -> List (VariantCase -> VariantCase -> Boolean)
Instances
VariantEqs Nil(VariantEqs rs, Eq a) => VariantEqs (Cons sym a rs)
#VariantOrds Source
class VariantOrds :: RowList Type -> Constraintclass VariantOrds rl where
Members
variantOrds :: forall proxy. proxy rl -> List (VariantCase -> VariantCase -> Ordering)
Instances
VariantOrds Nil(VariantOrds rs, Ord a) => VariantOrds (Cons sym a rs)
#VariantShows Source
class VariantShows :: RowList Type -> Constraintclass VariantShows rl where
Members
variantShows :: forall proxy. proxy rl -> List (VariantCase -> String)
Instances
VariantShows Nil(VariantShows rs, Show a) => VariantShows (Cons sym a rs)
#VariantBounded Source
class VariantBounded :: RowList Type -> Constraintclass VariantBounded rl where
Members
variantBounded :: forall proxy. proxy rl -> List (BoundedDict VariantCase)
Instances
VariantBounded Nil(VariantBounded rs, Bounded a) => VariantBounded (Cons sym a rs)
#VariantBoundedEnums Source
class VariantBoundedEnums :: RowList Type -> Constraintclass (VariantBounded rl) <= VariantBoundedEnums rl where
Members
variantBoundedEnums :: forall proxy. proxy rl -> List (BoundedEnumDict VariantCase)
Instances
VariantBoundedEnums Nil(VariantBoundedEnums rs, BoundedEnum a) => VariantBoundedEnums (Cons sym a rs)
Re-exports from Data.Variant.Internal
#Contractable Source
class Contractable :: forall k. Row k -> Row k -> Constraintclass Contractable gt lt
Instances
(RowToList lt ltl, Union lt a gt, VariantTags ltl) => Contractable gt lt
#VariantMatchCases Source
class VariantMatchCases :: RowList Type -> Row Type -> Type -> Constraintclass VariantMatchCases rl vo b | rl -> vo b
Instances
(VariantMatchCases rl vo' b, Cons sym a vo' vo, TypeEquals k (a -> b)) => VariantMatchCases (Cons sym k rl) vo bVariantMatchCases Nil () b