Files
gf-core/examples/letter/Letter.gfcm
2004-01-29 12:03:23 +00:00

288 lines
102 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
concrete Finnish of Letter = open ResFin in {flags startcat = Letter ;flags lexer = textlit ;flags unlexer = textlit ;lincat Author = {s : (ResFin.Num => (ResFin.Gen => Str)) ;n : ResFin.DepNum ;g : ResFin.DepGen }= {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> str @ 0 }} ;n = <ResFin.depnum>;g = <ResFin.depgen>} ;"Author" ;
lin BePromoted : Letter.Sentence = \ Position @ 0 -> {s = table ResFin.DepNum {(ResFin.depnum)(ResFin.cnum (ResFin.sg)) (ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> "sinut" ++ "on" ++ ("ylennetty" ++ Position @ 0.s ! <ResFin.sg>! <ResFin.fem>) ;(ResFin.masc)=> "sinut" ++ "on" ++ ("ylennetty" ++ Position @ 0.s ! <ResFin.sg>! <ResFin.masc>) } ;(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> "teidät" ++ "on" ++ ("ylennetty" ++ Position @ 0.s ! <ResFin.pl>! <ResFin.fem>) ;(ResFin.masc)=> "teidät" ++ "on" ++ ("ylennetty" ++ Position @ 0.s ! <ResFin.pl>! <ResFin.masc>) }}}}} ;"(sinut on)ylennetty Position_0" ;
lin ColleagueHe : Letter.Recipient = \ -> {s = "kollega" ;n = <ResFin.sg>;g = <ResFin.masc>} ;"kollega" ;
lin ColleagueShe : Letter.Recipient = \ -> {s = "kollega" ;n = <ResFin.sg>;g = <ResFin.fem>} ;"kollega" ;
lin ColleaguesHe : Letter.Recipient = \ -> {s = "kollegat" ;n = <ResFin.pl>;g = <ResFin.masc>} ;"kollegat" ;
lin ColleaguesShe : Letter.Recipient = \ -> {s = "kollegat" ;n = <ResFin.pl>;g = <ResFin.fem>} ;"kollegat" ;
lin Company : Letter.NounPhrase = \ -> {s = "yrityksemme" ;n = <ResFin.sg>;g = <ResFin.fem>} ;"yrityksemme" ;
lin Competitor : Letter.NounPhrase = \ -> {s = "pahin" ++ "kilpailijamme" ;n = <ResFin.sg>;g = <ResFin.masc>} ;"pahin kilpailijamme" ;
lin DarlingHe : Letter.Recipient = \ -> {s = "kulta" ;n = <ResFin.sg>;g = <ResFin.masc>} ;"kulta" ;
lin DarlingShe : Letter.Recipient = \ -> {s = "kulta" ;n = <ResFin.sg>;g = <ResFin.fem>} ;"kulta" ;
lin Dean : Letter.Author = \ -> {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "dekaani" }} ;n = <ResFin.cnum <ResFin.sg>> ;g = <ResFin.cgen <ResFin.masc>> } ;"dekaani" ;
lin DearRec : Letter.Heading = \ Recipient @ 0 -> {s = table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakas" }! (Recipient @ 0.g);(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakkaat" }! (Recipient @ 0.g)}! (Recipient @ 0.n)++ Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"rakas Recipient_0" ;
lincat Ending = {s : (ResFin.Num => (ResFin.Gen => Str)) ;n : ResFin.DepNum ;g : ResFin.DepGen }= {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> str @ 0 }} ;n = <ResFin.depnum>;g = <ResFin.depgen>} ;"Ending" ;
lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> "parhain" ++ ("terveisin" ++ "<p>")++ Author @ 0.s ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> "parhain" ++ ("terveisin" ++ "<p>")++ Author @ 0.s ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> "parhain" ++ ("terveisin" ++ "<p>")++ Author @ 0.s ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> "parhain" ++ ("terveisin" ++ "<p>")++ Author @ 0.s ! <ResFin.sg>! <ResFin.masc>}} ;n = Author @ 0.n ;g = Author @ 0.g } ;"(parhain terveisin <p>)Author_0" ;
lin GoBankrupt : Letter.Sentence = \ NounPhrase @ 0 -> {s = table ResFin.DepNum {(ResFin.depnum)(ResFin.cnum (ResFin.sg)) (ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> NounPhrase @ 0.s ++ (table ResFin.Num {(ResFin.sg)=> "on" ;(ResFin.pl)=> "ovat" }! (NounPhrase @ 0.n)++ (table ResFin.Num {(ResFin.pl)=> "menneet" ;(ResFin.sg)=> "mennyt" }! (NounPhrase @ 0.n)++ "konkurssiin")) }}}}} ;"NounPhrase_0 on mennyt konkurssiin" ;
lincat Heading = {s : Str ;n : ResFin.Num ;g : ResFin.Gen }= {s = str @ 0 ;n = <ResFin.sg>;g = <ResFin.masc>} ;"Heading" ;
lin HelloRec : Letter.Heading = \ Recipient @ 0 -> {s = "Terve" ++ Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Terve Recipient_0" ;
lin Honour : Letter.Mode = \ -> {s = table ResFin.DepNum {(ResFin.depnum)=> table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "meillä" ++ "on" ++ ("kunnia" ++ ("ilmoittaa" ++ "teille" ++ "että")) } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "minulla" ++ "on" ++ ("kunnia" ++ ("ilmoittaa" ++ "sinulle" ++ "että")) }}} ;(ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "meillä" ++ "on" ++ ("kunnia" ++ ("ilmoittaa" ++ "sinulle" ++ "että")) } ;(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "meillä" ++ "on" ++ ("kunnia" ++ ("ilmoittaa" ++ "teille" ++ "että")) }}} ;(ResFin.cnum (ResFin.sg)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "minulla" ++ "on" ++ ("kunnia" ++ ("ilmoittaa" ++ "sinulle" ++ "että")) } ;(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "minulla" ++ "on" ++ ("kunnia" ++ ("ilmoittaa" ++ "teille" ++ "että")) }}}}} ;"(minulla on)kunnia (ilmoittaa sinulle)että" ;
lin ILoveYou : Letter.Sentence = \ -> {s = table ResFin.DepNum {(ResFin.depnum)=> table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakastamme" ++ "teitä" } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakastan" ++ "sinua" }}} ;(ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakastamme" ++ "sinua" } ;(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakastamme" ++ "teitä" }}} ;(ResFin.cnum (ResFin.sg)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakastan" ++ "sinua" } ;(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakastan" ++ "teitä" }}}}} ;"rakastan sinua" ;
lin InformalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> "terveisin" ++ "<p>" ++ Author @ 0.s ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> "terveisin" ++ "<p>" ++ Author @ 0.s ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> "terveisin" ++ "<p>" ++ Author @ 0.s ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> "terveisin" ++ "<p>" ++ Author @ 0.s ! <ResFin.sg>! <ResFin.masc>}} ;n = Author @ 0.n ;g = Author @ 0.g } ;"(terveisin <p>)Author_0" ;
lin JustHello : Letter.Heading = \ Recipient @ 0 -> {s = "Terve" ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Terve" ;
lincat Letter = {s : Str }= {s = str @ 0 } ;"Letter" ;
lincat Message = {s : (ResFin.DepNum => (ResFin.DepGen => (ResFin.Num => (ResFin.Gen => Str)))) }= {s = table ResFin.DepNum {(ResFin.depnum)(ResFin.cnum (ResFin.sg)) (ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> str @ 0 }}}}} ;"Message" ;
lin MkLetter : Letter.Letter = \ Heading @ 0, Message @ 1, Ending @ 2 -> {s = Heading @ 0.s ++ ("," ++ ("<p>" ++ (Message @ 1.s ! (Ending @ 2.n)! (Ending @ 2.g)! (Heading @ 0.n)! (Heading @ 0.g)++ ("." ++ ("<p>" ++ Ending @ 2.s ! (Heading @ 0.n)! (Heading @ 0.g)))))) } ;"Heading_0 , <p> Message_1 . <p> Ending_2" ;
lincat Mode = {s : (ResFin.DepNum => (ResFin.DepGen => (ResFin.Num => (ResFin.Gen => Str)))) }= {s = table ResFin.DepNum {(ResFin.depnum)(ResFin.cnum (ResFin.sg)) (ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> str @ 0 }}}}} ;"Mode" ;
lin ModeSent : Letter.Message = \ Mode @ 0, Sentence @ 1 -> {s = table ResFin.DepNum {(ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.masc>}} ;(ResFin.cgen (ResFin.masc)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.masc>}} ;(ResFin.depgen)=> table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.sg>! <ResFin.masc>}}} ;(ResFin.cnum (ResFin.sg)) => table ResFin.DepGen {(ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.masc>}} ;(ResFin.cgen (ResFin.masc)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.masc>}} ;(ResFin.depgen)=> table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.depgen>! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.depgen>! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.depgen>! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.depgen>! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.depgen>! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.depgen>! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.depgen>! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.depgen>! <ResFin.sg>! <ResFin.masc>}}} ;(ResFin.depnum)=> table ResFin.DepGen {(ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.masc>}} ;(ResFin.cgen (ResFin.masc)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.depnum>! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.masc>}} ;(ResFin.depgen)=> table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.depnum>! <ResFin.depgen>! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.depnum>! <ResFin.depgen>! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.depnum>! <ResFin.depgen>! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.depnum>! <ResFin.depgen>! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.depnum>! <ResFin.depgen>! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.depnum>! <ResFin.depgen>! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.depnum>! <ResFin.depgen>! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.depnum>! <ResFin.depgen>! <ResFin.sg>! <ResFin.masc>}}}}} ;"Mode_0 Sentence_1" ;
lin Mother : Letter.Author = \ -> {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "äiti" }} ;n = <ResFin.cnum <ResFin.sg>> ;g = <ResFin.cgen <ResFin.fem>> } ;"äiti" ;
lin Name : Letter.Author = \ String @ 0 -> {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> String @ 0.s }} ;n = <ResFin.cnum <ResFin.sg>> ;g = <ResFin.cgen <ResFin.masc>> } ;"String_0" ;
lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResFin.sg>;g = <ResFin.masc>} ;"String_0" ;
lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResFin.sg>;g = <ResFin.fem>} ;"String_0" ;
lincat NounPhrase = {s : Str ;n : ResFin.Num ;g : ResFin.Gen }= {s = str @ 0 ;n = <ResFin.sg>;g = <ResFin.masc>} ;"NounPhrase" ;
lin OurCustomers : Letter.NounPhrase = \ -> {s = "asiakkaamme" ;n = <ResFin.pl>;g = <ResFin.masc>} ;"asiakkaamme" ;
lin PlainRec : Letter.Heading = \ Recipient @ 0 -> {s = Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Recipient_0" ;
lin PlainSent : Letter.Message = \ Sentence @ 0 -> {s = Sentence @ 0.s } ;"Sentence_0" ;
lincat Position = {s : (ResFin.Num => (ResFin.Gen => Str)) }= {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> str @ 0 }}} ;"Position" ;
lin President : Letter.Author = \ -> {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "presidentti" }} ;n = <ResFin.cnum <ResFin.sg>> ;g = <ResFin.cgen <ResFin.masc>> } ;"presidentti" ;
lin ProjectManager : Letter.Position = \ -> {s = table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "projektipäälliköiksi" } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "projektipäälliköksi" }}} ;"projektipäälliköksi" ;
lincat Recipient = {s : Str ;n : ResFin.Num ;g : ResFin.Gen }= {s = str @ 0 ;n = <ResFin.sg>;g = <ResFin.masc>} ;"Recipient" ;
lin Regret : Letter.Mode = \ -> {s = table ResFin.DepNum {(ResFin.depnum)=> table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "meidän" ++ ("on" ++ ("valitettavasti" ++ "ilmoitettava")++ "että")} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "minun" ++ ("on" ++ ("valitettavasti" ++ "ilmoitettava")++ "että")}}} ;(ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "meidän" ++ ("on" ++ ("valitettavasti" ++ "ilmoitettava")++ "että")}}} ;(ResFin.cnum (ResFin.sg)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "minun" ++ ("on" ++ ("valitettavasti" ++ "ilmoitettava")++ "että")}}}}} ;"minun (on valitettavasti ilmoitettava)että" ;
lin Senior : Letter.Position = \ -> {s = table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "vanhemmaksi" ++ "tutkijaksi" } ;(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "vanhemmiksi" ++ "tutkijoiksi" }}} ;"vanhemmaksi tutkijaksi" ;
lincat Sentence = {s : (ResFin.DepNum => (ResFin.DepGen => (ResFin.Num => (ResFin.Gen => Str)))) }= {s = table ResFin.DepNum {(ResFin.depnum)(ResFin.cnum (ResFin.sg)) (ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> str @ 0 }}}}} ;"Sentence" ;
lin Spouse : Letter.Author = \ -> {s = table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> "miehenne" ;(ResFin.masc)=> "vaimonne" } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> "miehesi" ;(ResFin.masc)=> "vaimosi" }} ;n = <ResFin.depnum>;g = <ResFin.depgen>} ;"vaimosi" ;
}
resource ResFin = {param DepGen = depgen | cgen ResFin.Gen ;
param DepNum = depnum | cnum ResFin.Num ;
param Gen = masc | fem ;
param Kas = nom | acc ;
param Num = sg | pl ;
}
abstract Letter = {cat Author [] = ;
fun BePromoted : (h_ : Letter.Position)-> Letter.Sentence = data ;
fun ColleagueHe : Letter.Recipient = data ;
fun ColleagueShe : Letter.Recipient = data ;
fun ColleaguesHe : Letter.Recipient = data ;
fun ColleaguesShe : Letter.Recipient = data ;
fun Company : Letter.NounPhrase = data ;
fun Competitor : Letter.NounPhrase = data ;
fun DarlingHe : Letter.Recipient = data ;
fun DarlingShe : Letter.Recipient = data ;
fun Dean : Letter.Author = data ;
fun DearRec : (h_ : Letter.Recipient)-> Letter.Heading = data ;
cat Ending [] = ;
fun FormalEnding : (h_ : Letter.Author)-> Letter.Ending = data ;
fun GoBankrupt : (h_ : Letter.NounPhrase)-> Letter.Sentence = data ;
cat Heading [] = ;
fun HelloRec : (h_ : Letter.Recipient)-> Letter.Heading = data ;
fun Honour : Letter.Mode = data ;
fun ILoveYou : Letter.Sentence = data ;
fun InformalEnding : (h_ : Letter.Author)-> Letter.Ending = data ;
fun JustHello : (h_ : Letter.Recipient)-> Letter.Heading = data ;
cat Letter [] = ;
cat Message [] = ;
fun MkLetter : (h_ : Letter.Heading)-> (h_ : Letter.Message)-> (h_ : Letter.Ending)-> Letter.Letter = data ;
cat Mode [] = ;
fun ModeSent : (h_ : Letter.Mode)-> (h_ : Letter.Sentence)-> Letter.Message = data ;
fun Mother : Letter.Author = data ;
fun Name : (h_ : PredefAbs.String)-> Letter.Author = data ;
fun NameHe : (h_ : PredefAbs.String)-> Letter.Recipient = data ;
fun NameShe : (h_ : PredefAbs.String)-> Letter.Recipient = data ;
cat NounPhrase [] = ;
fun OurCustomers : Letter.NounPhrase = data ;
fun PlainRec : (h_ : Letter.Recipient)-> Letter.Heading = data ;
fun PlainSent : (h_ : Letter.Sentence)-> Letter.Message = data ;
cat Position [] = ;
fun President : Letter.Author = data ;
fun ProjectManager : Letter.Position = data ;
cat Recipient [] = ;
fun Regret : Letter.Mode = data ;
fun Senior : Letter.Position = data ;
cat Sentence [] = ;
fun Spouse : Letter.Author = data ;
}
concrete French of Letter = open ResFra in {flags startcat = Letter ;flags lexer = textlit ;flags unlexer = textlit ;lincat Author = {s : (ResFra.Num => (ResFra.Gen => Str)) ;n : ResFra.DepNum ;g : ResFra.DepGen }= {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> str @ 0 }} ;n = <ResFra.depnum>;g = <ResFra.depgen>} ;"Author" ;
lin BePromoted : Letter.Sentence = \ Position @ 0 -> {s = table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.sg)) (ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> "vous" ++ ("avez" ++ "été")++ ("promues" ++ Position @ 0.s ! <ResFra.pl>! <ResFra.fem>) ;(ResFra.masc)=> "vous" ++ ("avez" ++ "été")++ ("promus" ++ Position @ 0.s ! <ResFra.pl>! <ResFra.masc>) } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)=> "tu" ++ ("as" ++ "été")++ ("promu" ++ Position @ 0.s ! <ResFra.sg>! <ResFra.masc>) ;(ResFra.fem)=> "tu" ++ ("as" ++ "été")++ ("promue" ++ Position @ 0.s ! <ResFra.sg>! <ResFra.fem>) }}}}} ;"(tu as été)promu Position_0" ;
lin ColleagueHe : Letter.Recipient = \ -> {s = "collègue" ;n = <ResFra.sg>;g = <ResFra.masc>} ;"collègue" ;
lin ColleagueShe : Letter.Recipient = \ -> {s = "collègue" ;n = <ResFra.sg>;g = <ResFra.fem>} ;"collègue" ;
lin ColleaguesHe : Letter.Recipient = \ -> {s = "collègues" ;n = <ResFra.pl>;g = <ResFra.masc>} ;"collègues" ;
lin ColleaguesShe : Letter.Recipient = \ -> {s = "collègues" ;n = <ResFra.pl>;g = <ResFra.fem>} ;"collègues" ;
lin Company : Letter.NounPhrase = \ -> {s = "notre" ++ "entreprise" ;n = <ResFra.sg>;g = <ResFra.fem>} ;"notre entreprise" ;
lin Competitor : Letter.NounPhrase = \ -> {s = "notre" ++ ("pire" ++ "compétiteur");n = <ResFra.sg>;g = <ResFra.masc>} ;"notre pire compétiteur" ;
lin DarlingHe : Letter.Recipient = \ -> {s = "chéri" ;n = <ResFra.sg>;g = <ResFra.masc>} ;"chéri" ;
lin DarlingShe : Letter.Recipient = \ -> {s = "chérie" ;n = <ResFra.sg>;g = <ResFra.fem>} ;"chérie" ;
lin Dean : Letter.Author = \ -> {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "le" ++ "doyen" }} ;n = <ResFra.cnum <ResFra.sg>> ;g = <ResFra.cgen <ResFra.masc>> } ;"le doyen" ;
lin DearRec : Letter.Heading = \ Recipient @ 0 -> {s = table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)=> "cher" ;(ResFra.fem)=> "chère" }! (Recipient @ 0.g);(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)=> "chers" ;(ResFra.fem)=> "chères" }! (Recipient @ 0.g)}! (Recipient @ 0.n)++ Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"cher Recipient_0" ;
lincat Ending = {s : (ResFra.Num => (ResFra.Gen => Str)) ;n : ResFra.DepNum ;g : ResFra.DepGen }= {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> str @ 0 }} ;n = <ResFra.depnum>;g = <ResFra.depgen>} ;"Ending" ;
lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> "avec" ++ (table ResFra.Num {(ResFra.sg)=> "mes" ;(ResFra.pl)=> "nos" }! (table ResFra.DepNum {(ResFra.cnum (ResFra.pl)) => <ResFra.pl>;(ResFra.depnum)(ResFra.cnum (ResFra.sg)) => <ResFra.sg>}! (Author @ 0.n)) ++ ("salutations" ++ ("distinguées" ++ "<p>")++ Author @ 0.s ! <ResFra.sg>! <ResFra.fem>));(ResFra.masc)=> "avec" ++ (table ResFra.Num {(ResFra.sg)=> "mes" ;(ResFra.pl)=> "nos" }! (table ResFra.DepNum {(ResFra.cnum (ResFra.pl)) => <ResFra.pl>;(ResFra.depnum)(ResFra.cnum (ResFra.sg)) => <ResFra.sg>}! (Author @ 0.n)) ++ ("salutations" ++ ("distinguées" ++ "<p>")++ Author @ 0.s ! <ResFra.sg>! <ResFra.masc>))} ;(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> "avec" ++ (table ResFra.Num {(ResFra.sg)=> "mes" ;(ResFra.pl)=> "nos" }! (table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.pl)) => <ResFra.pl>;(ResFra.cnum (ResFra.sg)) => <ResFra.sg>}! (Author @ 0.n)) ++ ("salutations" ++ ("distinguées" ++ "<p>")++ Author @ 0.s ! <ResFra.pl>! <ResFra.fem>));(ResFra.masc)=> "avec" ++ (table ResFra.Num {(ResFra.sg)=> "mes" ;(ResFra.pl)=> "nos" }! (table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.pl)) => <ResFra.pl>;(ResFra.cnum (ResFra.sg)) => <ResFra.sg>}! (Author @ 0.n)) ++ ("salutations" ++ ("distinguées" ++ "<p>")++ Author @ 0.s ! <ResFra.pl>! <ResFra.masc>))}} ;n = Author @ 0.n ;g = Author @ 0.g } ;"avec mes (salutations distinguées <p>)Author_0" ;
lin GoBankrupt : Letter.Sentence = \ NounPhrase @ 0 -> {s = table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.sg)) (ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> NounPhrase @ 0.s ++ (table ResFra.Num {(ResFra.sg)=> "a" ;(ResFra.pl)=> "ont" }! (NounPhrase @ 0.n)++ ("fait" ++ "banqueroute")) }}}}} ;"NounPhrase_0 a fait banqueroute" ;
lincat Heading = {s : Str ;n : ResFra.Num ;g : ResFra.Gen }= {s = str @ 0 ;n = <ResFra.sg>;g = <ResFra.masc>} ;"Heading" ;
lin HelloRec : Letter.Heading = \ Recipient @ 0 -> {s = "Bonjour" ++ Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Bonjour Recipient_0" ;
lin Honour : Letter.Mode = \ -> {s = table ResFra.DepNum {(ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "avons" ++ ("l\'honneur" ++ "de" ++ ("vous" ++ "informer" ++ "que")) } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "avons" ++ ("l\'honneur" ++ "de" ++ ("t\'informer" ++ "que")) }}} ;(ResFra.depnum)=> table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "avons" ++ ("l\'honneur" ++ "de" ++ ("vous" ++ "informer" ++ "que")) } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "j\'ai" ++ ("l\'honneur" ++ "de" ++ ("t\'informer" ++ "que")) }}} ;(ResFra.cnum (ResFra.sg)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "j\'ai" ++ ("l\'honneur" ++ "de" ++ ("vous" ++ "informer" ++ "que")) } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "j\'ai" ++ ("l\'honneur" ++ "de" ++ ("t\'informer" ++ "que")) }}}}} ;"j\\\'ai (l\\\'honneur de)t\\\'informer que" ;
lin ILoveYou : Letter.Sentence = \ -> {s = table ResFra.DepNum {(ResFra.cnum (ResFra.sg)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ ("vous" ++ "aime")} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "t\'aime" }}} ;(ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ ("vous" ++ "aimons")} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "t\'aimons" }}} ;(ResFra.depnum)=> table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "t\'aime" } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ ("vous" ++ "aimons")}}}}} ;"je t\\\'aime" ;
lin InformalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> "Amicalement" ++ "<p>" ++ Author @ 0.s ! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> "Amicalement" ++ "<p>" ++ Author @ 0.s ! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> "Amicalement" ++ "<p>" ++ Author @ 0.s ! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> "Amicalement" ++ "<p>" ++ Author @ 0.s ! <ResFra.sg>! <ResFra.masc>}} ;n = Author @ 0.n ;g = Author @ 0.g } ;"(Amicalement <p>)Author_0" ;
lin JustHello : Letter.Heading = \ Recipient @ 0 -> {s = "Bonjour" ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Bonjour" ;
lincat Letter = {s : Str }= {s = str @ 0 } ;"Letter" ;
lincat Message = {s : (ResFra.DepNum => (ResFra.DepGen => (ResFra.Num => (ResFra.Gen => Str)))) }= {s = table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.sg)) (ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> str @ 0 }}}}} ;"Message" ;
lin MkLetter : Letter.Letter = \ Heading @ 0, Message @ 1, Ending @ 2 -> {s = Heading @ 0.s ++ ("," ++ ("<p>" ++ (Message @ 1.s ! (Ending @ 2.n)! (Ending @ 2.g)! (Heading @ 0.n)! (Heading @ 0.g)++ ("." ++ ("<p>" ++ Ending @ 2.s ! (Heading @ 0.n)! (Heading @ 0.g)))))) } ;"Heading_0 , <p> Message_1 . <p> Ending_2" ;
lincat Mode = {s : (ResFra.DepNum => (ResFra.DepGen => (ResFra.Num => (ResFra.Gen => Str)))) }= {s = table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.sg)) (ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> str @ 0 }}}}} ;"Mode" ;
lin ModeSent : Letter.Message = \ Mode @ 0, Sentence @ 1 -> {s = table ResFra.DepNum {(ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.masc>}} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.masc>}} ;(ResFra.depgen)=> table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.sg>! <ResFra.masc>}}} ;(ResFra.cnum (ResFra.sg)) => table ResFra.DepGen {(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.masc>}} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.masc>}} ;(ResFra.depgen)=> table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.depgen>! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.depgen>! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.depgen>! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.depgen>! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.depgen>! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.depgen>! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.depgen>! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.depgen>! <ResFra.sg>! <ResFra.masc>}}} ;(ResFra.depnum)=> table ResFra.DepGen {(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.masc>}} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.depnum>! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.masc>}} ;(ResFra.depgen)=> table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.depnum>! <ResFra.depgen>! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.depnum>! <ResFra.depgen>! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.depnum>! <ResFra.depgen>! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.depnum>! <ResFra.depgen>! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.depnum>! <ResFra.depgen>! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.depnum>! <ResFra.depgen>! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.depnum>! <ResFra.depgen>! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.depnum>! <ResFra.depgen>! <ResFra.sg>! <ResFra.masc>}}}}} ;"Mode_0 Sentence_1" ;
lin Mother : Letter.Author = \ -> {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "maman" }} ;n = <ResFra.cnum <ResFra.sg>> ;g = <ResFra.cgen <ResFra.fem>> } ;"maman" ;
lin Name : Letter.Author = \ String @ 0 -> {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> String @ 0.s }} ;n = <ResFra.cnum <ResFra.sg>> ;g = <ResFra.cgen <ResFra.masc>> } ;"String_0" ;
lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResFra.sg>;g = <ResFra.masc>} ;"String_0" ;
lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResFra.sg>;g = <ResFra.fem>} ;"String_0" ;
lincat NounPhrase = {s : Str ;n : ResFra.Num ;g : ResFra.Gen }= {s = str @ 0 ;n = <ResFra.sg>;g = <ResFra.masc>} ;"NounPhrase" ;
lin OurCustomers : Letter.NounPhrase = \ -> {s = "nos" ++ "clients" ;n = <ResFra.pl>;g = <ResFra.masc>} ;"nos clients" ;
lin PlainRec : Letter.Heading = \ Recipient @ 0 -> {s = Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Recipient_0" ;
lin PlainSent : Letter.Message = \ Sentence @ 0 -> {s = Sentence @ 0.s } ;"Sentence_0" ;
lincat Position = {s : (ResFra.Num => (ResFra.Gen => Str)) }= {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> str @ 0 }}} ;"Position" ;
lin President : Letter.Author = \ -> {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "le" ++ "président" }} ;n = <ResFra.cnum <ResFra.sg>> ;g = <ResFra.cgen <ResFra.masc>> } ;"le président" ;
lin ProjectManager : Letter.Position = \ -> {s = table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "chef" ++ ("de" ++ "projet")} ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "chefs" ++ ("de" ++ "projets")}}} ;"chef de projet" ;
lincat Recipient = {s : Str ;n : ResFra.Num ;g : ResFra.Gen }= {s = str @ 0 ;n = <ResFra.sg>;g = <ResFra.masc>} ;"Recipient" ;
lin Regret : Letter.Mode = \ -> {s = table ResFra.DepNum {(ResFra.depnum)=> table ResFra.DepGen {(ResFra.depgen)=> table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> "je" ++ "suis" ++ ("désolé" ++ ("d\'informer" ++ "que")) ;(ResFra.masc)=> "je" ++ "suis" ++ ("désolée" ++ ("d\'informer" ++ "que")) } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)=> "nous" ++ "sommes" ++ ("désolées" ++ ("d\'informer" ++ "que")) ;(ResFra.fem)=> "nous" ++ "sommes" ++ ("désolés" ++ ("d\'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "suis" ++ ("désolé" ++ ("d\'informer" ++ "que")) } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "sommes" ++ ("désolés" ++ ("d\'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "suis" ++ ("désolée" ++ ("d\'informer" ++ "que")) } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "sommes" ++ ("désolées" ++ ("d\'informer" ++ "que")) }}} ;(ResFra.cnum (ResFra.sg)) => table ResFra.DepGen {(ResFra.depgen)=> table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> "je" ++ "suis" ++ ("désolé" ++ ("d\'informer" ++ "que")) ;(ResFra.masc)=> "je" ++ "suis" ++ ("désolée" ++ ("d\'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "suis" ++ ("désolé" ++ ("d\'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "suis" ++ ("désolée" ++ ("d\'informer" ++ "que")) }}} ;(ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)=> table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)=> "nous" ++ "sommes" ++ ("désolées" ++ ("d\'informer" ++ "que")) ;(ResFra.fem)=> "nous" ++ "sommes" ++ ("désolés" ++ ("d\'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "sommes" ++ ("désolées" ++ ("d\'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "sommes" ++ ("désolés" ++ ("d\'informer" ++ "que")) }}}}} ;"(je suis)désolée d\\\'informer que" ;
lin Senior : Letter.Position = \ -> {s = table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "responsable" ++ "scientifique" } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "responsables" ++ "scientifiques" }}} ;"responsable scientifique" ;
lincat Sentence = {s : (ResFra.DepNum => (ResFra.DepGen => (ResFra.Num => (ResFra.Gen => Str)))) }= {s = table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.sg)) (ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> str @ 0 }}}}} ;"Sentence" ;
lin Spouse : Letter.Author = \ -> {s = table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)=> "ta" ++ "femme" ;(ResFra.fem)=> "ton" ++ "mari" } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)=> "vos" ++ "femmes" ;(ResFra.fem)=> "vos" ++ "maris" }} ;n = <ResFra.depnum>;g = <ResFra.depgen>} ;"ta femme" ;
}
resource ResFra = {param DepGen = depgen | cgen ResFra.Gen ;
param DepNum = depnum | cnum ResFra.Num ;
param Gen = masc | fem ;
param Kas = nom | acc ;
param Num = sg | pl ;
}
resource ResEng = {param DepNum = depnum | cnum ResEng.Num ;
param Kas = nom | acc ;
param Num = sg | pl ;
param Sex = masc | fem ;
}
concrete English of Letter = open ResEng in {flags startcat = Letter ;flags lexer = textlit ;flags unlexer = textlit ;lincat Author = {s : (ResEng.Num => (ResEng.Sex => Str)) ;n : ResEng.DepNum ;x : ResEng.Sex }= {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> str @ 0 }} ;n = <ResEng.depnum>;x = <ResEng.masc>} ;"Author" ;
lin BePromoted : Letter.Sentence = \ Position @ 0 -> {s = table ResEng.DepNum {(ResEng.depnum)(ResEng.cnum (ResEng.sg)) (ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> "you" ++ ("have" ++ ("been" ++ ("promoted" ++ "to")))++ Position @ 0.s ! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> "you" ++ ("have" ++ ("been" ++ ("promoted" ++ "to")))++ Position @ 0.s ! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> "you" ++ ("have" ++ ("been" ++ ("promoted" ++ "to")))++ Position @ 0.s ! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> "you" ++ ("have" ++ ("been" ++ ("promoted" ++ "to")))++ Position @ 0.s ! <ResEng.sg>! <ResEng.masc>}}}}} ;"(you have been promoted to)Position_0" ;
lin ColleagueHe : Letter.Recipient = \ -> {s = "colleague" ;n = <ResEng.sg>;x = <ResEng.masc>} ;"colleague" ;
lin ColleagueShe : Letter.Recipient = \ -> {s = "colleague" ;n = <ResEng.sg>;x = <ResEng.fem>} ;"colleague" ;
lin ColleaguesHe : Letter.Recipient = \ -> {s = "colleagues" ;n = <ResEng.pl>;x = <ResEng.masc>} ;"colleagues" ;
lin ColleaguesShe : Letter.Recipient = \ -> {s = "colleagues" ;n = <ResEng.pl>;x = <ResEng.fem>} ;"colleagues" ;
lin Company : Letter.NounPhrase = \ -> {s = "our" ++ "company" ;n = <ResEng.sg>} ;"our company" ;
lin Competitor : Letter.NounPhrase = \ -> {s = "our" ++ ("worst" ++ "competitor");n = <ResEng.sg>} ;"our worst competitor" ;
lin DarlingHe : Letter.Recipient = \ -> {s = "darling" ;n = <ResEng.sg>;x = <ResEng.masc>} ;"darling" ;
lin DarlingShe : Letter.Recipient = \ -> {s = "darling" ;n = <ResEng.sg>;x = <ResEng.fem>} ;"darling" ;
lin Dean : Letter.Author = \ -> {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "the" ++ "Dean" }} ;n = <ResEng.cnum <ResEng.sg>> ;x = <ResEng.masc>} ;"the Dean" ;
lin DearRec : Letter.Heading = \ Recipient @ 0 -> {s = "Dear" ++ Recipient @ 0.s ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Dear Recipient_0" ;
lincat Ending = {s : (ResEng.Num => (ResEng.Sex => Str)) ;n : ResEng.DepNum ;x : ResEng.Sex }= {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> str @ 0 }} ;n = <ResEng.depnum>;x = <ResEng.masc>} ;"Ending" ;
lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> "Sincerely" ++ ("yours" ++ "<p>")++ Author @ 0.s ! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> "Sincerely" ++ ("yours" ++ "<p>")++ Author @ 0.s ! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> "Sincerely" ++ ("yours" ++ "<p>")++ Author @ 0.s ! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> "Sincerely" ++ ("yours" ++ "<p>")++ Author @ 0.s ! <ResEng.sg>! <ResEng.masc>}} ;n = Author @ 0.n ;x = Author @ 0.x } ;"(Sincerely yours <p>)Author_0" ;
lin GoBankrupt : Letter.Sentence = \ NounPhrase @ 0 -> {s = table ResEng.DepNum {(ResEng.depnum)(ResEng.cnum (ResEng.sg)) (ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> NounPhrase @ 0.s ++ (table ResEng.Num {(ResEng.sg)=> "has" ;(ResEng.pl)=> "have" }! (NounPhrase @ 0.n)++ ("gone" ++ "bankrupt")) }}}}} ;"NounPhrase_0 has gone bankrupt" ;
lincat Heading = {s : Str ;n : ResEng.Num ;x : ResEng.Sex }= {s = str @ 0 ;n = <ResEng.sg>;x = <ResEng.masc>} ;"Heading" ;
lin HelloRec : Letter.Heading = \ Recipient @ 0 -> {s = "Hello" ++ Recipient @ 0.s ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Hello Recipient_0" ;
lin Honour : Letter.Mode = \ -> {s = table ResEng.DepNum {(ResEng.depnum)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "I" ++ ("have" ++ ("the" ++ ("honour" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))) } ;(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "we" ++ ("have" ++ ("the" ++ ("honour" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))) }}} ;(ResEng.cnum (ResEng.sg)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "I" ++ ("have" ++ ("the" ++ ("honour" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))) }}} ;(ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "we" ++ ("have" ++ ("the" ++ ("honour" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))) }}}}} ;"I have the honour to inform you that" ;
lin ILoveYou : Letter.Sentence = \ -> {s = table ResEng.DepNum {(ResEng.depnum)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "I" ++ ("love" ++ "you")} ;(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "we" ++ ("love" ++ "you")}}} ;(ResEng.cnum (ResEng.sg)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "I" ++ ("love" ++ "you")}}} ;(ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "we" ++ ("love" ++ "you")}}}}} ;"I love you" ;
lin InformalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> "With" ++ ("best" ++ ("regards" ++ "<p>")) ++ Author @ 0.s ! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> "With" ++ ("best" ++ ("regards" ++ "<p>")) ++ Author @ 0.s ! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> "With" ++ ("best" ++ ("regards" ++ "<p>")) ++ Author @ 0.s ! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> "With" ++ ("best" ++ ("regards" ++ "<p>")) ++ Author @ 0.s ! <ResEng.sg>! <ResEng.masc>}} ;n = Author @ 0.n ;x = Author @ 0.x } ;"(With best regards <p>)Author_0" ;
lin JustHello : Letter.Heading = \ Recipient @ 0 -> {s = "Hello" ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Hello" ;
lincat Letter = {s : Str }= {s = str @ 0 } ;"Letter" ;
lincat Message = {s : (ResEng.DepNum => (ResEng.Sex => (ResEng.Num => (ResEng.Sex => Str)))) }= {s = table ResEng.DepNum {(ResEng.depnum)(ResEng.cnum (ResEng.sg)) (ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> str @ 0 }}}}} ;"Message" ;
lin MkLetter : Letter.Letter = \ Heading @ 0, Message @ 1, Ending @ 2 -> {s = Heading @ 0.s ++ ("," ++ ("<p>" ++ (Message @ 1.s ! (Ending @ 2.n)! (Ending @ 2.x)! (Heading @ 0.n)! (Heading @ 0.x)++ ("." ++ ("<p>" ++ Ending @ 2.s ! (Heading @ 0.n)! (Heading @ 0.x)))))) } ;"Heading_0 , <p> Message_1 . <p> Ending_2" ;
lincat Mode = {s : (ResEng.DepNum => (ResEng.Sex => (ResEng.Num => (ResEng.Sex => Str)))) }= {s = table ResEng.DepNum {(ResEng.depnum)(ResEng.cnum (ResEng.sg)) (ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> str @ 0 }}}}} ;"Mode" ;
lin ModeSent : Letter.Message = \ Mode @ 0, Sentence @ 1 -> {s = table ResEng.DepNum {(ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.fem)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.masc>}} ;(ResEng.masc)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.masc>}}} ;(ResEng.cnum (ResEng.sg)) => table ResEng.Sex {(ResEng.fem)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.masc>}} ;(ResEng.masc)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.masc>}}} ;(ResEng.depnum)=> table ResEng.Sex {(ResEng.fem)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.pl>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.pl>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.sg>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.sg>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.sg>! <ResEng.masc>}} ;(ResEng.masc)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.pl>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.pl>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.sg>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.sg>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.sg>! <ResEng.masc>}}}}} ;"Mode_0 Sentence_1" ;
lin Mother : Letter.Author = \ -> {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "Mom" }} ;n = <ResEng.cnum <ResEng.sg>> ;x = <ResEng.fem>} ;"Mom" ;
lin Name : Letter.Author = \ String @ 0 -> {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> String @ 0.s }} ;n = <ResEng.cnum <ResEng.sg>> ;x = <ResEng.masc>} ;"String_0" ;
lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResEng.sg>;x = <ResEng.masc>} ;"String_0" ;
lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResEng.sg>;x = <ResEng.fem>} ;"String_0" ;
lincat NounPhrase = {s : Str ;n : ResEng.Num }= {s = str @ 0 ;n = <ResEng.sg>} ;"NounPhrase" ;
lin OurCustomers : Letter.NounPhrase = \ -> {s = "our" ++ "customers" ;n = <ResEng.pl>} ;"our customers" ;
lin PlainRec : Letter.Heading = \ Recipient @ 0 -> {s = Recipient @ 0.s ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Recipient_0" ;
lin PlainSent : Letter.Message = \ Sentence @ 0 -> {s = Sentence @ 0.s } ;"Sentence_0" ;
lincat Position = {s : (ResEng.Num => (ResEng.Sex => Str)) }= {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> str @ 0 }}} ;"Position" ;
lin President : Letter.Author = \ -> {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "the" ++ "President" }} ;n = <ResEng.cnum <ResEng.sg>> ;x = <ResEng.masc>} ;"the President" ;
lin ProjectManager : Letter.Position = \ -> {s = table ResEng.Num {(ResEng.sg)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "a" ++ ("project" ++ "manager")} ;(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "project" ++ "managers" }}} ;"a project manager" ;
lincat Recipient = {s : Str ;n : ResEng.Num ;x : ResEng.Sex }= {s = str @ 0 ;n = <ResEng.sg>;x = <ResEng.masc>} ;"Recipient" ;
lin Regret : Letter.Mode = \ -> {s = table ResEng.DepNum {(ResEng.depnum)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "I" ++ ("am" ++ ("sorry" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))} ;(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "we" ++ ("are" ++ ("sorry" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))}}} ;(ResEng.cnum (ResEng.sg)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "I" ++ ("am" ++ ("sorry" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))}}} ;(ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "we" ++ ("are" ++ ("sorry" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))}}}}} ;"I am sorry to inform you that" ;
lin Senior : Letter.Position = \ -> {s = table ResEng.Num {(ResEng.sg)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "a" ++ ("senior" ++ "fellow")} ;(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "senior" ++ "fellows" }}} ;"a senior fellow" ;
lincat Sentence = {s : (ResEng.DepNum => (ResEng.Sex => (ResEng.Num => (ResEng.Sex => Str)))) }= {s = table ResEng.DepNum {(ResEng.depnum)(ResEng.cnum (ResEng.sg)) (ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> str @ 0 }}}}} ;"Sentence" ;
lin Spouse : Letter.Author = \ -> {s = table ResEng.Num {(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> "your" ++ "husband" ;(ResEng.masc)=> "your" ++ "wife" } ;(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> "your" ++ "husbands" ;(ResEng.masc)=> "your" ++ "wives" }} ;n = <ResEng.depnum>;x = <ResEng.masc>} ;"your wife" ;
}
resource ResSve = {param DepNum = depnum | cnum ResSve.Num ;
param Gen = en | ett ;
param Kas = nom | acc ;
param Num = sg | pl ;
param Sex = masc | fem ;
}
concrete Swedish of Letter = open ResSve in {flags startcat = Letter ;flags lexer = textlit ;flags unlexer = textlit ;lincat Author = {s : (ResSve.Num => (ResSve.Sex => Str)) ;n : ResSve.DepNum ;x : ResSve.Sex }= {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> str @ 0 }} ;n = <ResSve.depnum>;x = <ResSve.masc>} ;"Author" ;
lin BePromoted : Letter.Sentence = \ Position @ 0 -> {s = table ResSve.DepNum {(ResSve.depnum)(ResSve.cnum (ResSve.sg)) (ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> "du" ++ ("har" ++ "blivit" ++ ("befordrad" ++ ("till" ++ Position @ 0.s ! <ResSve.sg>! <ResSve.fem>))) ;(ResSve.masc)=> "du" ++ ("har" ++ "blivit" ++ ("befordrad" ++ ("till" ++ Position @ 0.s ! <ResSve.sg>! <ResSve.masc>))) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> "ni" ++ ("har" ++ "blivit" ++ ("befordrade" ++ ("till" ++ Position @ 0.s ! <ResSve.pl>! <ResSve.fem>))) ;(ResSve.masc)=> "ni" ++ ("har" ++ "blivit" ++ ("befordrade" ++ ("till" ++ Position @ 0.s ! <ResSve.pl>! <ResSve.masc>))) }}}}} ;"du (har blivit)befordrad till Position_0" ;
lin ColleagueHe : Letter.Recipient = \ -> {s = "kollega" ;n = <ResSve.sg>;x = <ResSve.masc>} ;"kollega" ;
lin ColleagueShe : Letter.Recipient = \ -> {s = "kollega" ;n = <ResSve.sg>;x = <ResSve.fem>} ;"kollega" ;
lin ColleaguesHe : Letter.Recipient = \ -> {s = "kollegor" ;n = <ResSve.pl>;x = <ResSve.masc>} ;"kollegor" ;
lin ColleaguesShe : Letter.Recipient = \ -> {s = "kollegor" ;n = <ResSve.pl>;x = <ResSve.fem>} ;"kollegor" ;
lin Company : Letter.NounPhrase = \ -> {s = "vårt" ++ "företag" ;n = <ResSve.sg>;g = <ResSve.ett>} ;"vårt företag" ;
lin Competitor : Letter.NounPhrase = \ -> {s = "vår" ++ ("värsta" ++ "konkurrent");n = <ResSve.sg>;g = <ResSve.en>} ;"vår värsta konkurrent" ;
lin DarlingHe : Letter.Recipient = \ -> {s = "älskling" ;n = <ResSve.sg>;x = <ResSve.masc>} ;"älskling" ;
lin DarlingShe : Letter.Recipient = \ -> {s = "älskling" ;n = <ResSve.sg>;x = <ResSve.fem>} ;"älskling" ;
lin Dean : Letter.Author = \ -> {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "Dekanus" }} ;n = <ResSve.cnum <ResSve.sg>> ;x = <ResSve.masc>} ;"Dekanus" ;
lin DearRec : Letter.Heading = \ Recipient @ 0 -> {s = table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> "Kära" ;(ResSve.masc)=> "Käre" }! (Recipient @ 0.x);(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "Kära" }! (Recipient @ 0.x)}! (Recipient @ 0.n)++ Recipient @ 0.s ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Käre Recipient_0" ;
lincat Ending = {s : (ResSve.Num => (ResSve.Sex => Str)) ;n : ResSve.DepNum ;x : ResSve.Sex }= {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> str @ 0 }} ;n = <ResSve.depnum>;x = <ResSve.masc>} ;"Ending" ;
lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> "Med" ++ ("vänlig" ++ ("hälsning" ++ "<p>")) ++ Author @ 0.s ! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> "Med" ++ ("vänlig" ++ ("hälsning" ++ "<p>")) ++ Author @ 0.s ! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> "Med" ++ ("vänlig" ++ ("hälsning" ++ "<p>")) ++ Author @ 0.s ! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> "Med" ++ ("vänlig" ++ ("hälsning" ++ "<p>")) ++ Author @ 0.s ! <ResSve.sg>! <ResSve.masc>}} ;n = Author @ 0.n ;x = Author @ 0.x } ;"(Med vänlig hälsning <p>)Author_0" ;
lin GoBankrupt : Letter.Sentence = \ NounPhrase @ 0 -> {s = table ResSve.DepNum {(ResSve.depnum)(ResSve.cnum (ResSve.sg)) (ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> NounPhrase @ 0.s ++ ("har" ++ ("gått" ++ ("i" ++ "konkurs")))}}}}} ;"NounPhrase_0 har gått i konkurs" ;
lincat Heading = {s : Str ;n : ResSve.Num ;x : ResSve.Sex }= {s = str @ 0 ;n = <ResSve.sg>;x = <ResSve.masc>} ;"Heading" ;
lin HelloRec : Letter.Heading = \ Recipient @ 0 -> {s = "Hej" ++ Recipient @ 0.s ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Hej Recipient_0" ;
lin Honour : Letter.Mode = \ -> {s = table ResSve.DepNum {(ResSve.cnum (ResSve.sg)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("har" ++ ("äran" ++ ("att" ++ "meddela")) ++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("har" ++ ("äran" ++ ("att" ++ "meddela")) ++ ("er" ++ "att")) }}} ;(ResSve.depnum)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("har" ++ ("äran" ++ ("att" ++ "meddela")) ++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("har" ++ ("äran" ++ ("att" ++ "meddela")) ++ ("er" ++ "att")) }}} ;(ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("har" ++ ("äran" ++ ("att" ++ "meddela")) ++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("har" ++ ("äran" ++ ("att" ++ "meddela")) ++ ("er" ++ "att")) }}}}} ;"jag (har äran att meddela)dig att" ;
lin ILoveYou : Letter.Sentence = \ -> {s = table ResSve.DepNum {(ResSve.cnum (ResSve.sg)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("älskar" ++ "dig")} ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("älskar" ++ "er")}}} ;(ResSve.depnum)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("älskar" ++ "dig")} ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("älskar" ++ "er")}}} ;(ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("älskar" ++ "dig")} ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("älskar" ++ "er")}}}}} ;"jag älskar dig" ;
lin InformalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> "Med" ++ ("hälsningar" ++ "<p>")++ Author @ 0.s ! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> "Med" ++ ("hälsningar" ++ "<p>")++ Author @ 0.s ! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> "Med" ++ ("hälsningar" ++ "<p>")++ Author @ 0.s ! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> "Med" ++ ("hälsningar" ++ "<p>")++ Author @ 0.s ! <ResSve.sg>! <ResSve.masc>}} ;n = Author @ 0.n ;x = Author @ 0.x } ;"(Med hälsningar <p>)Author_0" ;
lin JustHello : Letter.Heading = \ Recipient @ 0 -> {s = "Hej" ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Hej" ;
lincat Letter = {s : Str }= {s = str @ 0 } ;"Brev" ;
lincat Message = {s : (ResSve.DepNum => (ResSve.Sex => (ResSve.Num => (ResSve.Sex => Str)))) }= {s = table ResSve.DepNum {(ResSve.depnum)(ResSve.cnum (ResSve.sg)) (ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> str @ 0 }}}}} ;"Message" ;
lin MkLetter : Letter.Letter = \ Heading @ 0, Message @ 1, Ending @ 2 -> {s = Heading @ 0.s ++ ("," ++ ("<p>" ++ (Message @ 1.s ! (Ending @ 2.n)! (Ending @ 2.x)! (Heading @ 0.n)! (Heading @ 0.x)++ ("." ++ ("<p>" ++ Ending @ 2.s ! (Heading @ 0.n)! (Heading @ 0.x)))))) } ;"brevmall" ;
lincat Mode = {s : (ResSve.DepNum => (ResSve.Sex => (ResSve.Num => (ResSve.Sex => Str)))) }= {s = table ResSve.DepNum {(ResSve.depnum)(ResSve.cnum (ResSve.sg)) (ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> str @ 0 }}}}} ;"Mode" ;
lin ModeSent : Letter.Message = \ Mode @ 0, Sentence @ 1 -> {s = table ResSve.DepNum {(ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.fem)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.masc>}} ;(ResSve.masc)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.masc>}}} ;(ResSve.cnum (ResSve.sg)) => table ResSve.Sex {(ResSve.fem)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.masc>}} ;(ResSve.masc)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.masc>}}} ;(ResSve.depnum)=> table ResSve.Sex {(ResSve.fem)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.pl>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.pl>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.sg>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.sg>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.sg>! <ResSve.masc>}} ;(ResSve.masc)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.pl>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.pl>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.sg>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.sg>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.sg>! <ResSve.masc>}}}}} ;"Mode_0 Sentence_1" ;
lin Mother : Letter.Author = \ -> {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "Mamma" }} ;n = <ResSve.cnum <ResSve.sg>> ;x = <ResSve.fem>} ;"Mamma" ;
lin Name : Letter.Author = \ String @ 0 -> {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> String @ 0.s }} ;n = <ResSve.cnum <ResSve.sg>> ;x = <ResSve.masc>} ;"String_0" ;
lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResSve.sg>;x = <ResSve.masc>} ;"String_0" ;
lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResSve.sg>;x = <ResSve.fem>} ;"String_0" ;
lincat NounPhrase = {s : Str ;n : ResSve.Num ;g : ResSve.Gen }= {s = str @ 0 ;n = <ResSve.sg>;g = <ResSve.en>} ;"NounPhrase" ;
lin OurCustomers : Letter.NounPhrase = \ -> {s = "våra" ++ "kunder" ;n = <ResSve.pl>;g = <ResSve.en>} ;"våra kunder" ;
lin PlainRec : Letter.Heading = \ Recipient @ 0 -> {s = Recipient @ 0.s ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Recipient_0" ;
lin PlainSent : Letter.Message = \ Sentence @ 0 -> {s = Sentence @ 0.s } ;"Sentence_0" ;
lincat Position = {s : (ResSve.Num => (ResSve.Sex => Str)) }= {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> str @ 0 }}} ;"Position" ;
lin President : Letter.Author = \ -> {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "Presidenten" }} ;n = <ResSve.cnum <ResSve.sg>> ;x = <ResSve.masc>} ;"Presidenten" ;
lin ProjectManager : Letter.Position = \ -> {s = table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "projektchef" } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "projektchefer" }}} ;"projektchef" ;
lincat Recipient = {s : Str ;n : ResSve.Num ;x : ResSve.Sex }= {s = str @ 0 ;n = <ResSve.sg>;x = <ResSve.masc>} ;"Recipient" ;
lin Regret : Letter.Mode = \ -> {s = table ResSve.DepNum {(ResSve.cnum (ResSve.sg)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("måste" ++ ("tyvärr" ++ "meddela")++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("måste" ++ ("tyvärr" ++ "meddela")++ ("er" ++ "att")) }}} ;(ResSve.depnum)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("måste" ++ ("tyvärr" ++ "meddela")++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("måste" ++ ("tyvärr" ++ "meddela")++ ("er" ++ "att")) }}} ;(ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("måste" ++ ("tyvärr" ++ "meddela")++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("måste" ++ ("tyvärr" ++ "meddela")++ ("er" ++ "att")) }}}}} ;"jag (måste tyvärr meddela)dig att" ;
lin Senior : Letter.Position = \ -> {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "äldre" ++ "forskare" }}} ;"äldre forskare" ;
lincat Sentence = {s : (ResSve.DepNum => (ResSve.Sex => (ResSve.Num => (ResSve.Sex => Str)))) }= {s = table ResSve.DepNum {(ResSve.depnum)(ResSve.cnum (ResSve.sg)) (ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> str @ 0 }}}}} ;"Sentence" ;
lin Spouse : Letter.Author = \ -> {s = table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)=> "din" ++ "hustru" ;(ResSve.fem)=> "din" ++ "man" } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)=> "era" ++ "hustrur" ;(ResSve.fem)=> "era" ++ "män" }} ;n = <ResSve.depnum>;x = <ResSve.masc>} ;"din hustru" ;
}
resource ResRusU = {param DepGen = depgen | cgen ResRusU.Gen ;
param DepNum = depnum | cnum ResRusU.Num ;
param Gen = masc | fem ;
param Kas = nom | acc ;
param Num = sg | pl ;
}
concrete Russian of Letter = open ResRusU in {flags startcat = Letter ;flags lexer = textlit ;flags unlexer = textlit ;flags coding = utf8 ;lincat Author = {s : (ResRusU.Num => (ResRusU.Gen => Str)) ;n : ResRusU.DepNum ;g : ResRusU.DepGen }= {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> str @ 0 }} ;n = <ResRusU.depnum>;g = <ResRusU.depgen>} ;"Author" ;
lin BePromoted : Letter.Sentence = \ Position @ 0 -> {s = table ResRusU.DepNum {(ResRusU.depnum)(ResRusU.cnum (ResRusU.sg)) (ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> "вы" ++ "были" ++ ("назначены" ++ Position @ 0.s ! <ResRusU.pl>! <ResRusU.fem>) ;(ResRusU.masc)=> "вы" ++ "были" ++ ("назначены" ++ Position @ 0.s ! <ResRusU.pl>! <ResRusU.masc>) } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)=> "ты" ++ "был" ++ ("назначен" ++ Position @ 0.s ! <ResRusU.sg>! <ResRusU.masc>) ;(ResRusU.fem)=> "ты" ++ "была" ++ ("назначена" ++ Position @ 0.s ! <ResRusU.sg>! <ResRusU.fem>) }}}}} ;"(ты был)назначен Position_0" ;
lin ColleagueHe : Letter.Recipient = \ -> {s = "коллега" ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"коллега" ;
lin ColleagueShe : Letter.Recipient = \ -> {s = "коллега" ;n = <ResRusU.sg>;g = <ResRusU.fem>} ;"коллега" ;
lin ColleaguesHe : Letter.Recipient = \ -> {s = "коллеги" ;n = <ResRusU.pl>;g = <ResRusU.masc>} ;"коллеги" ;
lin ColleaguesShe : Letter.Recipient = \ -> {s = "коллеги" ;n = <ResRusU.pl>;g = <ResRusU.fem>} ;"коллеги" ;
lin Company : Letter.NounPhrase = \ -> {s = "наше" ++ "предприÑ<C2B8>Ñие" ;n = <ResRusU.sg>;g = <ResRusU.fem>} ;"наше предприÑ<C2B8>Ñие" ;
lin Competitor : Letter.NounPhrase = \ -> {s = "наш" ++ "конкурент" ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"наш конкурент" ;
lin DarlingHe : Letter.Recipient = \ -> {s = "любимый" ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"любимый" ;
lin DarlingShe : Letter.Recipient = \ -> {s = "любимаÑ<C2B0>" ;n = <ResRusU.sg>;g = <ResRusU.fem>} ;"любимаÑ<C2B0>" ;
lin Dean : Letter.Author = \ -> {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "декан" }} ;n = <ResRusU.cnum <ResRusU.sg>> ;g = <ResRusU.cgen <ResRusU.masc>> } ;"декан" ;
lin DearRec : Letter.Heading = \ Recipient @ 0 -> {s = table ResRusU.Num {(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "ДорогаÑ<C2B0>" ;(ResRusU.masc)=> "Дорогой" }! (Recipient @ 0.g);(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Дорогие" }! (Recipient @ 0.g)}! (Recipient @ 0.n)++ Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Дорогой Recipient_0" ;
lincat Ending = {s : (ResRusU.Num => (ResRusU.Gen => Str)) ;n : ResRusU.DepNum ;g : ResRusU.DepGen }= {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> str @ 0 }} ;n = <ResRusU.depnum>;g = <ResRusU.depgen>} ;"Ending" ;
lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> "С" ++ ("наилучшими" ++ ("пожеланиÑ<C2B8>ми," ++ "<p>")++ Author @ 0.s ! <ResRusU.pl>! <ResRusU.fem>) ;(ResRusU.masc)=> "С" ++ ("наилучшими" ++ ("пожеланиÑ<C2B8>ми," ++ "<p>")++ Author @ 0.s ! <ResRusU.pl>! <ResRusU.masc>) } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "С" ++ ("наилучшими" ++ ("пожеланиÑ<C2B8>ми," ++ "<p>")++ Author @ 0.s ! <ResRusU.sg>! <ResRusU.fem>) ;(ResRusU.masc)=> "С" ++ ("наилучшими" ++ ("пожеланиÑ<C2B8>ми," ++ "<p>")++ Author @ 0.s ! <ResRusU.sg>! <ResRusU.masc>) }} ;n = Author @ 0.n ;g = Author @ 0.g } ;"С (наилучшими пожеланиÑ<C2B8>ми, <p>)Author_0" ;
lin GoBankrupt : Letter.Sentence = \ NounPhrase @ 0 -> {s = table ResRusU.DepNum {(ResRusU.depnum)(ResRusU.cnum (ResRusU.sg)) (ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> NounPhrase @ 0.s ++ table ResRusU.Num {(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "обанкроÑилоÑ<C2BE>ÑŒ" ;(ResRusU.masc)=> "обанкроÑилÑ<C2BB>Ñ<EFBFBD>" }! (NounPhrase @ 0.g);(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "обанкроÑилиÑ<C2B8>ÑŒ" }! (NounPhrase @ 0.g)}! (NounPhrase @ 0.n)}}}}} ;"NounPhrase_0 обанкроÑилÑ<C2BB>Ñ<EFBFBD>" ;
lincat Heading = {s : Str ;n : ResRusU.Num ;g : ResRusU.Gen }= {s = str @ 0 ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"Heading" ;
lin HelloRec : Letter.Heading = \ Recipient @ 0 -> {s = table ResRusU.Num {(ResRusU.sg)=> "ЗдравÑ<C2B2>Ñвуй" ;(ResRusU.pl)=> "ЗдравÑ<C2B2>ÑвуйÑе" }! (Recipient @ 0.n)++ Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"ЗдравÑ<C2B2>Ñвуй Recipient_0" ;
lin Honour : Letter.Mode = \ -> {s = table ResRusU.DepNum {(ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мы" ++ "имеем" ++ ("чеÑ<C2B5>ÑÑŒ" ++ ("Ñ<>ообщиÑÑŒ" ++ "вам" ++ ("," ++ "что")))} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мы" ++ "имеем" ++ ("чеÑ<C2B5>ÑÑŒ" ++ ("Ñ<>ообщиÑÑŒ" ++ "тебе" ++ ("," ++ "что")))}}} ;(ResRusU.depnum)=> table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мы" ++ "имеем" ++ ("чеÑ<C2B5>ÑÑŒ" ++ ("Ñ<>ообщиÑÑŒ" ++ "вам" ++ ("," ++ "что")))} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Ñ<>" ++ "имею" ++ ("чеÑ<C2B5>ÑÑŒ" ++ ("Ñ<>ообщиÑÑŒ" ++ "тебе" ++ ("," ++ "что")))}}} ;(ResRusU.cnum (ResRusU.sg)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Ñ<>" ++ "имею" ++ ("чеÑ<C2B5>ÑÑŒ" ++ ("Ñ<>ообщиÑÑŒ" ++ "вам" ++ ("," ++ "что")))} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Ñ<>" ++ "имею" ++ ("чеÑ<C2B5>ÑÑŒ" ++ ("Ñ<>ообщиÑÑŒ" ++ "тебе" ++ ("," ++ "что")))}}}}} ;"(Ñ<> имею)чеÑ<C2B5>ÑÑŒ (Ñ<>ообщиÑÑŒ тебе), что" ;
lin ILoveYou : Letter.Sentence = \ -> {s = table ResRusU.DepNum {(ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мы" ++ ("ваÑ<C2B0>" ++ "любим")} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мы" ++ ("ÑебÑ<C2B1>" ++ "любим")}}} ;(ResRusU.depnum)=> table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мы" ++ ("ваÑ<C2B0>" ++ "любим")} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Ñ<>" ++ ("ÑебÑ<C2B1>" ++ "люблю")}}} ;(ResRusU.cnum (ResRusU.sg)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Ñ<>" ++ ("ваÑ<C2B0>" ++ "люблю")} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Ñ<>" ++ ("ÑебÑ<C2B1>" ++ "люблю")}}}}} ;"Ñ<> ÑебÑ<C2B1> люблю" ;
lin InformalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> "С" ++ ("дружеÑ<C2B5>ким" ++ ("приветом," ++ "<p>")) ++ Author @ 0.s ! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> "С" ++ ("дружеÑ<C2B5>ким" ++ ("приветом," ++ "<p>")) ++ Author @ 0.s ! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "С" ++ ("дружеÑ<C2B5>ким" ++ ("приветом," ++ "<p>")) ++ Author @ 0.s ! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> "С" ++ ("дружеÑ<C2B5>ким" ++ ("приветом," ++ "<p>")) ++ Author @ 0.s ! <ResRusU.sg>! <ResRusU.masc>}} ;n = Author @ 0.n ;g = Author @ 0.g } ;"(С дружеÑ<C2B5>ким приветом, <p>)Author_0" ;
lin JustHello : Letter.Heading = \ Recipient @ 0 -> {s = table ResRusU.Num {(ResRusU.sg)=> "ЗдравÑ<C2B2>Ñвуй" ;(ResRusU.pl)=> "ЗдравÑ<C2B2>ÑвуйÑе" }! (Recipient @ 0.n);n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"ЗдравÑ<C2B2>Ñвуй" ;
lincat Letter = {s : Str }= {s = str @ 0 } ;"Letter" ;
lincat Message = {s : (ResRusU.DepNum => (ResRusU.DepGen => (ResRusU.Num => (ResRusU.Gen => Str)))) }= {s = table ResRusU.DepNum {(ResRusU.depnum)(ResRusU.cnum (ResRusU.sg)) (ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> str @ 0 }}}}} ;"Message" ;
lin MkLetter : Letter.Letter = \ Heading @ 0, Message @ 1, Ending @ 2 -> {s = Heading @ 0.s ++ ("," ++ ("<p>" ++ (Message @ 1.s ! (Ending @ 2.n)! (Ending @ 2.g)! (Heading @ 0.n)! (Heading @ 0.g)++ ("." ++ ("<p>" ++ Ending @ 2.s ! (Heading @ 0.n)! (Heading @ 0.g)))))) } ;"Heading_0 , <p> Message_1 . <p> Ending_2" ;
lincat Mode = {s : (ResRusU.DepNum => (ResRusU.DepGen => (ResRusU.Num => (ResRusU.Gen => Str)))) }= {s = table ResRusU.DepNum {(ResRusU.depnum)(ResRusU.cnum (ResRusU.sg)) (ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> str @ 0 }}}}} ;"Mode" ;
lin ModeSent : Letter.Message = \ Mode @ 0, Sentence @ 1 -> {s = table ResRusU.DepNum {(ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.masc>}} ;(ResRusU.cgen (ResRusU.masc)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.masc>}} ;(ResRusU.depgen)=> table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.masc>}}} ;(ResRusU.cnum (ResRusU.sg)) => table ResRusU.DepGen {(ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.masc>}} ;(ResRusU.cgen (ResRusU.masc)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.masc>}} ;(ResRusU.depgen)=> table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.masc>}}} ;(ResRusU.depnum)=> table ResRusU.DepGen {(ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.masc>}} ;(ResRusU.cgen (ResRusU.masc)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.depnum>! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.masc>}} ;(ResRusU.depgen)=> table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.depnum>! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.depnum>! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.depnum>! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.depnum>! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.depnum>! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.depnum>! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.depnum>! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.depnum>! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.masc>}}}}} ;"Mode_0 Sentence_1" ;
lin Mother : Letter.Author = \ -> {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мама" }} ;n = <ResRusU.cnum <ResRusU.sg>> ;g = <ResRusU.cgen <ResRusU.fem>> } ;"мама" ;
lin Name : Letter.Author = \ String @ 0 -> {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> String @ 0.s }} ;n = <ResRusU.cnum <ResRusU.sg>> ;g = <ResRusU.cgen <ResRusU.masc>> } ;"String_0" ;
lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"String_0" ;
lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResRusU.sg>;g = <ResRusU.fem>} ;"String_0" ;
lincat NounPhrase = {s : Str ;n : ResRusU.Num ;g : ResRusU.Gen }= {s = str @ 0 ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"NounPhrase" ;
lin OurCustomers : Letter.NounPhrase = \ -> {s = "наши" ++ "клиенты" ;n = <ResRusU.pl>;g = <ResRusU.masc>} ;"наши клиенты" ;
lin PlainRec : Letter.Heading = \ Recipient @ 0 -> {s = Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Recipient_0" ;
lin PlainSent : Letter.Message = \ Sentence @ 0 -> {s = Sentence @ 0.s } ;"Sentence_0" ;
lincat Position = {s : (ResRusU.Num => (ResRusU.Gen => Str)) }= {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> str @ 0 }}} ;"Position" ;
lin President : Letter.Author = \ -> {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "президент" }} ;n = <ResRusU.cnum <ResRusU.sg>> ;g = <ResRusU.cgen <ResRusU.masc>> } ;"президент" ;
lin ProjectManager : Letter.Position = \ -> {s = table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "менеджерами" ++ "проектов" } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "менеджером" ++ "проекта" }}} ;"менеджером проекта" ;
lincat Recipient = {s : Str ;n : ResRusU.Num ;g : ResRusU.Gen }= {s = str @ 0 ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"Recipient" ;
lin Regret : Letter.Mode = \ -> {s = table ResRusU.DepNum {(ResRusU.depnum)=> table ResRusU.DepGen {(ResRusU.cgen (ResRusU.masc)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "вы" ++ ("вынуждены" ++ ("Ñ<>ообщиÑÑŒ" ++ ("," ++ "что")))} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Ñ<>" ++ ("вынужден" ++ ("Ñ<>ообщиÑÑŒ" ++ ("," ++ "что")))}} ;(ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "вы" ++ ("вынуждены" ++ ("Ñ<>ообщиÑÑŒ" ++ ("," ++ "что")))} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Ñ<>" ++ ("вынуждена" ++ ("Ñ<>ообщиÑÑŒ" ++ ("," ++ "что")))}} ;(ResRusU.depgen)=> table ResRusU.Num {(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "Ñ<>" ++ ("вынужден" ++ ("Ñ<>ообщиÑÑŒ" ++ ("," ++ "что")));(ResRusU.masc)=> "Ñ<>" ++ ("вынуждена" ++ ("Ñ<>ообщиÑÑŒ" ++ ("," ++ "что")))} ;(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "вы" ++ ("вынуждены" ++ ("Ñ<>ообщиÑÑŒ" ++ ("," ++ "что")))}}} ;(ResRusU.cnum (ResRusU.sg)) => table ResRusU.DepGen {(ResRusU.depgen)=> table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> "Ñ<>" ++ ("вынужден" ++ ("Ñ<>ообщиÑÑŒ" ++ ("," ++ "что")));(ResRusU.masc)=> "Ñ<>" ++ ("вынуждена" ++ ("Ñ<>ообщиÑÑŒ" ++ ("," ++ "что")))}} ;(ResRusU.cgen (ResRusU.masc)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Ñ<>" ++ ("вынужден" ++ ("Ñ<>ообщиÑÑŒ" ++ ("," ++ "что")))}} ;(ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Ñ<>" ++ ("вынуждена" ++ ("Ñ<>ообщиÑÑŒ" ++ ("," ++ "что")))}}} ;(ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "вы" ++ ("вынуждены" ++ ("Ñ<>ообщиÑÑŒ" ++ ("," ++ "что")))}}}}} ;"Ñ<> вынуждена Ñ<>ообщиÑÑŒ , что" ;
lin Senior : Letter.Position = \ -> {s = table ResRusU.Num {(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Ñ<>Ñаршим" ++ ("научным" ++ "Ñ<>оÑрудником")} ;(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Ñ<>Ñаршими" ++ ("научными" ++ "Ñ<>оÑрудниками")}}} ;"Ñ<>Ñаршим научным Ñ<>оÑрудником" ;
lincat Sentence = {s : (ResRusU.DepNum => (ResRusU.DepGen => (ResRusU.Num => (ResRusU.Gen => Str)))) }= {s = table ResRusU.DepNum {(ResRusU.depnum)(ResRusU.cnum (ResRusU.sg)) (ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> str @ 0 }}}}} ;"Sentence" ;
lin Spouse : Letter.Author = \ -> {s = table ResRusU.Num {(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "твой" ++ "муж" ;(ResRusU.masc)=> "ÑвоÑ<C2BE>" ++ "жена" } ;(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)=> "ваши" ++ "жены" ;(ResRusU.fem)=> "ваши" ++ "мужьÑ<C592>" }} ;n = <ResRusU.depnum>;g = <ResRusU.depgen>} ;"ÑвоÑ<C2BE> жена" ;
}