+ let bindings + where bindings + do notation I explored enough of the alternative language design space and decided that we should commit fully to Lambda style. That means no more highly tacit/concatenative point-free/partial programs as default. We'll keep taking advantage of those capabilities when it makes sense, but the library will continue to see massive overhauls.
43 lines
787 B
Plaintext
43 lines
787 B
Plaintext
!import "base.tri" !Local
|
|
!import "list.tri" !Local
|
|
!import "lazy.tri" !Local
|
|
|
|
match_ = y (self value patterns :
|
|
triage
|
|
t
|
|
(_ : t)
|
|
(pattern rest :
|
|
triage
|
|
t
|
|
(_ : t)
|
|
(test result :
|
|
if (test value)
|
|
(result value)
|
|
(self value rest))
|
|
pattern)
|
|
patterns)
|
|
|
|
match = (value patterns :
|
|
match_ value (map (sublist :
|
|
pair (head sublist) (head (tail sublist)))
|
|
patterns))
|
|
|
|
otherwise = const (t t)
|
|
|
|
cond_ self patterns =
|
|
lazyList
|
|
(_ : t)
|
|
(pattern rest :
|
|
matchPair
|
|
(testK actionK :
|
|
lazyBool
|
|
actionK
|
|
(_ : self rest)
|
|
(testK t))
|
|
pattern)
|
|
patterns
|
|
|
|
cond patterns = y cond_ patterns
|
|
|
|
guard testK actionK = pair testK actionK
|