A basic dependent sum type; the first component is a tag that specifies the type of the second; for example, think of a GADT such as:
data Tag a where
AString :: Tag String
AnInt :: Tag IntThen, we have the following valid expressions of type Applicative f => DSum Tag f:
AString ==> "hello!"
AnInt ==> 42And we can write functions that consume DSum Tag f values by matching,
such as:
toString :: DSum Tag Identity -> String
toString (AString :=> Identity str) = str
toString (AnInt :=> Identity int) = show intBy analogy to the (key => value) construction for dictionary entries in
many dynamic languages, we use (key :=> value) as the constructor for
dependent sums. The :=> and ==> operators have very low precedence and
bind to the right, so if the Tag GADT is extended with an additional
constructor Rec :: Tag (DSum Tag Identity), then Rec ==> AnInt ==> 3 + 4
is parsed as would be expected (Rec ==> (AnInt ==> (3 + 4))) and has type
DSum Identity Tag. Its precedence is just above that of $, so
foo bar $ AString ==> "eep" is equivalent to foo bar (AString ==> "eep").
Constructors
forall a. tag a :=> f ainfixr 1
Instances4Eq, Ord, Read, Show
(GEq tag, Has' Eq tag f) => Eq (DSum tag f)Defined in dependent-sum-0.6.2.0 · Data.Dependent.Sum(GCompare tag, Has' Eq tag f, Has' Ord tag f) => Ord (DSum tag f)Defined in dependent-sum-0.6.2.0 · Data.Dependent.Sum(GRead tag, Has' Read tag f) => Read (DSum tag f)Defined in dependent-sum-0.6.2.0 · Data.Dependent.Sum(GShow tag, Has' Show tag f) => Show (DSum tag f)Defined in dependent-sum-0.6.2.0 · Data.Dependent.Sum