=> separates a type’s constraint context from the rest of the type. It also
appears in define-class and define-instance heads.
Syntax
⟨class⟩ :a => ⟨type⟩
(⟨class1⟩ :a) (⟨class2⟩ :a) => ⟨type⟩
Semantics
- Everything to the left of
=>is a type class constraint (also called a predicate). - Everything to the right is the main type or class head.
=>is purely part of type syntax. It is not a value-level operator.
Options
- A single predicate can appear without extra parentheses.
- Multiple predicates are written as separate parenthesized constraints.
- In class declarations,
=>introduces superclass-style requirements.
Example
(declare sort-pair ((Ord :a) => Tuple :a :a -> Tuple :a :a))
;; To be Ord, you must be Eq
(define-class (Eq :t => Ord :t)
...)