-- -- -- Base -- -- def eq := matcher | #$val as () with | $tgt -> if val = tgt then [()] else [] | $ as (something) with | $tgt -> [tgt] def bool := eq def char := eq def integer := eq def float := eq -- -- Utility -- def id := 1#%1 def fst (x, y) := x def snd (x, y) := y infixr expression 0 $ def ($) f x := f x def compose f g := \x -> g (f x) def flip fn := \$x $y -> fn y x def eqAs a x y := match x as a with | #y -> True | _ -> False def curry f x y := f (x, y) def uncurry f (x, y) := f x y -- -- Boolean -- infixr expression 3 && infixr expression 2 || def (&&) b1 b2 := if b1 then b2 else False def (||) b1 b2 := if b1 then True else b2 def not b := if b then False else True -- -- Unordered Pair -- def unorderedPair m := matcher | ($, $) as (m, m) with | ($x, $y) -> [(x, y), (y, x)] | $ as (eq) with | $tgt -> [tgt]