%-
(:def address
(:lambda dog sex
(:match dog
[Boy "boy"]
[_ "girl"])))
tydecl sex = Boy | Girl
tydecl animal = Dog | Cat
(:def obliquePronoun
(:lambda dog sex
(:match dog
[Boy "He"]
[g "She"])))
(:def possPronoun
(:lambda dog sex
(:match dog
[Girl "her"]
[Boy "his"])))
; see https://github.com/vmchale/doggo-command-line/blob/master/src/main.rs
(:def greeter
(:lambda dog (text, sex)
(:match dog
[(name, boyGirl)
(:oneof
(| "${name} is a good ${($ address boyGirl)}. ${($ obliquePronoun boyGirl)} tries ${($ possPronoun boyGirl)} best."))])))
(:def main
($ greeter ("Maxine", Girl)))