(* these should probably be part of the stdlib eventually *) tuple-map := {func => {tup => tuple-fold.<{xs => {x => concat.>}}, <>, tup> }}; flatten := {t => tuple-fold.<{ x => { xs => x xs } }, "", t>}; word := {w => flatten.(tuple-map.orthography.w)}; wd := concat.; middle := syll | concat. | concat. | concat.; syll := ; end := | 2: | <"r"> | <"n"> ; orthography := { "z" => "s" ; "s" => "ss" ; "dz" => "z" ; "kʷ" => "qu" ; "k" => "c" ; "x" => "ch" ; "ʎ" => "lh" ; "ɲ" => "nh" ; "ʃ" => "sc" ; "ts" => "tz" ; "aː" => "á" ; "eː" => "é" ; "iː" => "í" ; "oː" => "ó" ; "uː" => "ú" ; "ɛ" => "è" ; "ɔ" => "o" ; "ɾ" => "r" ; "tɾ" => "tr" ; "ɾt" => "rt" ; x => x }; begin := | ; cons ::= b k d d x d f g g ɲ h j l l l ʎ m m m n n n p kʷ ɾ z z z s s s ʃ ʃ t t t tg tj ts ts tɾ ɾt v dz; initcons ::= b k d x d f g ɲ h j l m n p kʷ ɾ s ʃ t v; vowel := 4: commonvowel | uncommonvowel; commonvowel ::= a i u e eː o; uncommonvowel ::= aː ɛ oː ɔ iː uː; final := "s" | 6: ""; fix wd; puts (word.wd) " (pronounced /" (flatten.wd) "/)";