A program is a sequence of type and let definitions followed by one expression, whose value is the result. The program is checked and evaluated as you type. Types are inferred; annotations are optional and checked.
type
let
let id = \x -> x
∀ a. a → a
let id : {a} a -> a = \x -> x
a
\(n : Int) -> n + 1
type Maybe a = Just a | Nothing
match m with | Just x -> x | Nothing -> 0
let x = 1 in x + 1
if b then 1 else 2
1 :: [2, 3]
(1, True)
+ - <
Int
(a + b) + c
-- …
/- … -/
--- …
/-- … -/
Definitions may refer to each other in any order. A recursive call at a different type (polymorphic recursion) needs a full annotation.
The page URL always contains the current program, so the address bar is the share link. Your latest program is also kept in this browser.
Language guide · What is proved · Source