An extension that allows you to use Unicode characters in lieu of certain built-in operators and names.
| ASCII | Unicode | Use(s) |
|---|---|---|
:: | ∷ | has type |
-> | → | function types, lambdas, case branches, etc. |
=> | ⇒ | class constraints |
forall | ∀ | explicit polymorphism |
<- | ← | do notation |
* | ★ | the type (or kind) of types (e.g., Int :: ★) |
>- | ⤚ | proc notation for Arrows |
-< | ⤙ | proc notation for Arrows |
>>- | ⤜ | proc notation for Arrows |
-<< | ⤛ | proc notation for Arrows |
For example:
runST :: (forall s. ST s a) -> a
would become
runST ∷ (∀ s. ST s a) → a
Note that the * vs. ★ example is slightly different: since * isn't reserved, ★ also works the same way as * for multiplication, or any other function named (*), and vice-versa. For example:
ghci> 2 ★ 3
6
ghci> let (*) = (+) in 2 ★ 3
5
ghci> let (★) = (-) in 2 * 3
-1