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