--# -path=.:../../prelude -- -- 1 Morpholical inflection of Noun and Verbs of Nepali -- -- by Dinesh Simkhada, Shafqat Virk - 2011 -- resource MorphoNep = ResNep ** open Prelude,Predef in { flags optimize=all ; coding = utf8; param {- For distinguishing root ending in -a- and rest of other. Root ending in -a/अ or h - is regarded as reg and rest ireg -} VCase = VReg | VIReg ; --1 Nouns oper mkN : (x1,_,_,_,_,_,_,_,_,_,_,x12 : Str) -> Gender -> NType -> NPerson -> Noun = \sn,sa,si,sd,sab,sl,pn,pa,pi,pd,pab,pl,g,t,h -> { s = table { Sg => table { Nom => sn ; Acc => sa ; Ins => si ; Dat => sd ; Abl => sab ; Loc => sl } ; Pl => table { Nom => pn ; Acc => pa ; Ins => pi ; Dat => pd ; Abl => pab ; Loc => pl } } ; g = g ; t = t ; h = h } ; -- TODO -- ?? NEED TO ADD CASE IF ENDS WITH 'o' (PG. 99 Jaya) -- Regular nouns mkNMF : Str -> Gender -> NType -> NPerson -> Noun ; mkNMF str g t h = mkN str (str + "laI:") (str + "le") (str + "laI:") (str + "baq") (str + "ma") (str + "hru") (str + "hrulaI:") (str + "hrule") (str + "hrulaI:") (str + "hrubaq") (str + "hruma") g t h ; -- Regular Nouns mkNReg : Str -> NType -> NPerson -> Noun ; mkNReg str typ hnr = mkNMF str Masc typ hnr ; -- Faminine nouns mkNFem : Str -> NType -> NPerson -> Noun ; mkNFem str typ hnr = mkNMF str Fem typ hnr ; -- Uncountable nouns, which have same singular and plular form -- eg water mkNUnc : Str -> Gender -> NType -> NPerson -> Noun ; mkNUnc str g t h = mkN str (str + "laI:") (str + "le") (str + "laI:") (str + "baq") (str + "ma") str (str + "laI:") (str + "le") (str + "laI:") (str + "baq") (str + "ma") g t h ; -- Proper Names regN1 : Str -> Gender -> NType -> NPerson -> Noun ; regN1 str g t h = mkN str (str + "laI:") (str + "le") (str + "laI:") (str + "baq") (str + "ma") str str str str str str g t h ; -- pronouns makePron : (x1,_,_,_,_,x6 : Str) -> {s : Case => Str} = \n,ac,i,d,ab,l-> { s = table { Nom => n ; Acc => ac ; Ins => i ; Dat => d ; Abl => ab ; Loc => l } } ; makePronReg : Str -> {s : Case => Str} ; makePronReg str = makePron str (str + "laI:") (str + "le") (str + "laI:") (str + "baq") (str + "ma") ; --2. Derminers makeDet : Str -> Str -> Str -> Str -> Number -> Determiner = \s1,s2,s3, s4, n -> { s = table { Sg => table { Masc => s1 ; Fem => s2 } ; Pl => table { Masc => s3 ; Fem => s4 } } ; n = n } ; -- maIdetn helper makeIDet : Str -> Str -> {s : Gender => Str} = \s1,s2 -> { s = table { Masc => s1 ; Fem => s2 } } ; -- Quantifiers makeQuant : Str -> Str -> Str -> Str -> {s : Number => Gender => Str } = \sm,sf,pm,pf -> { s = table { Sg => table { Masc => sm ; Fem => sf } ; Pl => table { Masc => pm ; Fem => pf } } } ; -- Proposition makePrep : Str -> Preposition = \str -> {s = str } ** { lock_Prep = <>}; --3. Verbs mkVerb : (_: Str) -> Verb = \inf -> let root = (tk 2 inf) ; in { s = table { Root => root ; Inf => inf ; PVForm => (tk 1 inf) ; Imp => (mkImpForm root).s ; ProgRoot aspect number gender => (mkProgRoot root aspect number gender).s ; VF tense aspect polarity person number gender => case aspect of { Imperf => (mkVImperf root tense polarity person number gender).s ; Perf => (mkVPerf root tense polarity person number gender).s } } } ; --For the case of lets (lets sleep) mkImpForm : Str -> {s:Str} ; mkImpForm str = let vcase = (rootCheck str).vcase; root2 = (rootCheck str).root2 in { s = case vcase of { VReg => root2 + "wV" ; _ => root2 + "AV" }; }; --For the progressive root case mkProgRoot : Str -> Aspect -> Number -> Gender -> {s : Str } = \root,aspect,number,gender -> let root1 = (rootCheck root).root1 ; root2 = (rootCheck root).root2 ; vcase = (rootCheck root).vcase in { s= case of { => (mkProgReg root2 aspect number gender).s ; <_, "ja"> => (mkProgIReg root aspect number gender).s ; <_, "ha"> => (mkProgIReg root aspect number gender).s ; <_, _> => (mkProgIReg root2 aspect number gender).s }; }; mkProgReg : Str -> Aspect -> Number -> Gender -> {s : Str } = \root2,aspect,number,gender -> { s = case of { => root2 + "dE" ; => root2 + "irheko" ; => root2 + "irheki" ; => root2 + "irheka" }; }; mkProgIReg : Str -> Aspect -> Number -> Gender -> {s : Str } = \root,aspect,number,gender -> { s = case of { => root + "dE" ; => root + "i:rheko" ; => root + "i:rheki" ; => root + "i:rheka" }; } ; --need to check for want_VV <- Not inflected correctly rootCheck : Str -> {root1:Str; root2:Str; vcase: VCase} = \root -> { {- Root inflection case 1. irregular case of Janu/जानु/go root = जा root1 = जान् root2 = ग 2. irregular case of Hunu/हुनु/Become root = हु root1 = हुन् root2 = भ 3. reg Verbs ending in Consonants - पढनु/to study root = पढ्, root1 = पढ root2 = पढ् <- original root = पढ्, root1 = पढ्, root2 = पढ <- changed to this make sure it doesn't break 4. Khanu/खानु/to eat, Dinu/दिनु /to Give root = खा root1 = खान् root2 = खा 5. Dhunu/धुनु/wash, Runu/रुनु/Cry root = धु root1 = धुन् root2 = धो 6. Aaunu/आउनु/to Come, Pathaunu/पठाउनु/to Send root = आउ root1 = आउँ root2 = आ -} root1 = case root of { "ja" => root + "nx:" ; "hu" => root + "nx:" ; rot + "x:" => root ; rot + ("h") => root + "nx:" ; --cmnt rot + ("a"|"i"|"I") => root + "nx:" ; rot + ("e"|"u"|"U") => root + "nx:" ; rot + ("f"|"F") => root + "V" ; _ => root } ; root2 = case root of { "ja" => "g" ; "hu" => "B" ; rot + "x:" => rot ; rot + ("a"|"i"|"I") => root ; rot + ("h") => root + "nx:" ; --cmnt rot + ("e"|"u"|"U") => rot + "o" ; rot + ("f"|"F") => rot ; _ => root } ; vcase = case root of { rot + "x:" => VReg; --rot + "h" => VReg; _ => VIReg } } ; mkVImperf : Str -> VTense -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, t, po, pn, n, g -> let root1 = (rootCheck root).root1 ; root2 = (rootCheck root).root2 ; vcase = (rootCheck root).vcase ; in {s = case t of { NPresent => (mkVPreNP root root1 vcase po pn n g).s ; NPast Simpl => (mkVPstSNP root root2 vcase po pn n g).s ; NPast Hab => (mkVPstHNP root root1 vcase po pn n g).s ; --NPast Unknown => (mkVPstUNP root root2 vcase po pn n g).s ; NFuture Defin => (mkVFutDNP root po pn n g).s ; NFuture NDefin => (mkVFutNDNP root root2 vcase po pn n g).s } } ; mkVPerf : Str -> VTense -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, t, po, pn, n, g -> let root1 = (rootCheck root).root1 ; root2 = (rootCheck root).root2 ; vcase = (rootCheck root).vcase ; in {s = case t of { --it seems root has no use in these cases, root2 worsk for all --if no problem arises better to remove root parameter NPresent => (mkVPreP root root2 vcase po pn n g).s ; NPast Simpl => (mkVPstSP root root2 vcase po pn n g).s ; NPast Hab => (mkVPstHP root root2 vcase po pn n g).s ; --NPast Unknown => (mkVPstUP root root2 vcase po pn n g).s ; NFuture Defin => (mkVFutDefP root root2 vcase po pn n g).s ; NFuture NDefin => (mkVFutNDefP root root2 vcase po pn n g).s } }; -- Present, Nonperfective aspect, Non-progressive mode, mkVPreNP : Str -> Str -> VCase -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root1, vc, po, pn, n, g -> {s = case vc of { VReg => (mkVPreNPReg root po pn n g).s ; VIReg => (mkVPreNPIReg root root1 po pn n g).s } } ; -- mkVPreNP Helper for VRrg case mkVPreNPReg : Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, po, pn, n, g -> {s = case of { -- Positive case => root + "cu" ; -- छु => root + "cwV" ; -- छौं => root + "csx:" ; -- छस् => root + "cesx:" ; -- छेस् => root + "cw" ; -- छौ => root + "cx:yw" ; -- छ्यौ => root + "cw" ; -- छौ => root + "c" ; -- छ => root + "ce" ; -- छे => root + "cnx:" ; -- छन् => root + "cinx:" ; -- छिन् => root + "cnx:" ; -- छन् => root + "nuhunx:c" ; -- नुहुन्छ -- Negative Case => root + "dinV" ; -- इनँ (पढ्दिनँ) => root + "dEnEV" ; -- ऐनैँ (पढ्दैनैँ) => root + "dEnsx:" ; -- ऐनस् (पढदैनस्) => root + "dinsx:" ; -- इनस् (पढदिनस्) => root + "dEnE" ; -- ऐनै => root + "dinE" ; -- इनै => root + "dEnE" ; -- ऐनै => root + "dEn" ; -- ऐन => root + "din" ; -- इन => root + "dEnx:n" ; -- ऐनन् => root + "dinx:n" ; -- इनन् => root + "dEnx:n" ; -- ऐनन् => root + "nuhunx:n" -- नुहुन्न } } ; -- mkVPreNP Helper for VIRrg case mkVPreNPIReg : Str -> Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root1, po, pn, n, g -> {s = case of { -- Positive case => root1 + "cu" ; -- छु => root1 + "cwM" ; -- छौं => root1 + "csx:" ; -- छस् => root1 + "cesx:" ; -- छेस् => root1 + "cw" ; -- छौ => root1 + "cx:yw" ; -- छ्यौ => root1 + "cw" ; -- छौ => root1 + "c" ; -- छ => root1 + "ce" ; -- छे => root1 + "cnx:" ; -- छन् => root1 + "cinx:" ; -- छिन् => root1 + "cnx:" ; -- छन् => root + "nuhunx:c" ; -- नुहुन्छ -- Negative Case => root + "VdinV" ; -- इनँ (खाँदिनँ) => root + "VdEnEV" ; -- ऐनैँ (खाँदैनैँ) => root + "VdEnsx:" ; -- ऐनस् (आउँदैनस्) => root + "Vdinsx:" ; -- इनस् (खाँदिनस्) => root + "VdEnE" ; -- ऐनै (खाँदैनै) => root + "VdinE" ; -- इनै => root + "VdEnE" ; -- ऐनै => root + "VdEn" ; -- ऐन => root + "Vdin" ; -- इन (खाँदिन) => root + "VdEnx:n" ; -- ऐनन् => root + "Vdinx:n" ; -- इनन् => root + "VdEnx:n" ; -- ऐनन् => root + "Vnuhunx:z=n" -- नुहुन्‍न } } ; -- Past Simple, Nonprogressive mode, nonperfective aspect mkVPstSNP : Str -> Str -> VCase -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root2, vc, po, pn, n, g -> {s = case vc of { VReg => (mkVPstSNPReg root root2 po pn n g).s ; VIReg => (mkVPstSNPIReg root root2 po pn n g).s } } ; -- mkVPstSNP Helper for VRrg case mkVPstSNPReg : Str -> Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root2, po, pn, n, g -> {s = case of { -- Positive case => root2 + "eV" ; -- एँ => root + "ywM" ; -- यौं => root2 + "isx:" ; -- इस् => root + "yw" ; -- यौ => root + "yw" ; -- यौ => root + "yo" ; -- यो => root2 + "I" ; -- इ (पढी) => root2 + "e" ; -- ए (पढे) => root2 + "inx:" ; -- इन् (पढिन्) => root2 + "e" ; -- ए (पढे) => root + "nuByo" ; -- नुभयो -- Negative case => root2 + "inV" ; -- इनँ => root2 + "enEV" ; -- एनैँ => root2 + "insx:" ; -- इनस् => root2 + "enE" ; -- एनै => root2 + "inE" ; -- इनै => root2 + "enE" ; -- एनै => root2 + "en" ; -- एन => root2 + "in" ; -- इन (पढिन) => root2 + "ennx:" ; -- एनन् (पढेनन्) => root2 + "innx:" ; -- इनन् (पढिनन्) => root2 + "ennx:" ; -- एनन् (पढेनन्) => root + "nuBe:n" -- नुभएन } } ; -- mkVPstSNP Helper for VIRrg case mkVPstSNPIReg : Str -> Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root2, po, pn, n, g -> {s = case of { -- Positive case => root2 + "e:V" ; -- एँ => root2 + "ywM" ; -- यौं => root2 + "i:sx:" ; -- इस् => root2 + "yw" ; -- यौ => root2 + "yw" ; -- यौ => root2 + "yo" ; -- यो => root2 + "I:" ; -- ई => root2 + "e:" ; -- ए => root2 + "i:nx:" ; -- इन् => root2 + "e:" ; -- ए => root + "nuByo" ; -- नुभयो -- Negative case => root2 + "i:nV" ; -- इनँ => root2 + "e:nEV" ; -- एनैँ => root2 + "i:nsx:" ; -- इनस् => root2 + "e:nE" ; -- एनै => root2 + "i:nE" ; -- इनै => root2 + "e:nE" ; -- एनै => root2 + "e:n" ; -- एन => root2 + "i:n" ; -- इन (पढिन) => root2 + "e:nnx:" ; -- एनन् (पढेनन्) => root2 + "i:nnx:" ; -- इनन् (पढिनन्) => root2 + "e:nnx:" ; -- एनन् (पढेनन्) => root + "nuBe:n" -- नुभएन } } ; -- Past Habitual, Nonprogressive mode, nonperfective aspect mkVPstHNP : Str -> Str -> VCase -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root1, vc, po, pn, n, g -> {s = case vc of { VReg => (mkVPstHNPGen root root1 po pn n g).s ; VIReg => (mkVPstHNPGen root1 root po pn n g).s } } ; -- mkVPstHNP helper, handles bith VReg and VIReg cases mkVPstHNPGen : Str -> Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root1, po, pn, n, g -> let neg = "dEn" ; -- दैन (TODO : CHECK FOR MAKE GENERIC FINCTION FOR POS AND NEG) in {s = case of { => root + "TeM" ; -- थें => root + "Tx:ywM" ; -- थ्यौं => root + "Tisx:" ; -- थिस् => root + "Tx:yw" ; -- थ्यौ => root + "Tx:yw" ; -- थ्यौ => root + "Tx:yo" ; -- थ्यो => root + "TI" ; -- थी => root + "Te" ; -- थे => root + "Tinx:" ; -- थिन् => root + "Te" ; -- थे => root1 + "nuhunx:z+Tx:yo" ; -- नुहुन्‌थ्यो => root + neg + "TeM" ; -- थें => root + neg + "Tx:ywM" ; -- थ्यौं => root + neg + "Tisx:" ; -- थिस् => root + neg + "Tx:yw" ; -- थ्यौ => root + neg + "Tx:yw" ; -- थ्यौ => root + neg + "Tx:yo" ; -- थ्यो => root + neg + "TI" ; -- थी => root + neg + "Te" ; -- थे => root + neg + "TInx:" ; -- थिन् => root + neg + "Te" ; -- थे => root1 + "nuhuVdEnTx:yo" -- नुहुँदैनथ्यो } }; {- -- Past Unknown, Nonprogressive mode, nonperfective aspect mkVPstUNP : Str -> Str -> VCase -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \ root, root2, vc, po, p, n, g -> {s = case vc of { VReg => case po of { Pos => (mkVPstUNPReg root root2 "" p n g).s ; Neg => (mkVPstUNPReg root root2 "n" p n g).s } ; VIReg => case po of { Pos => (mkVPstUNPIReg root root2 "" p n g).s ; Neg => (mkVPstUNPIReg root root2 "n" p n g).s } } }; -- mkVPstUNP helper for VReg case mkVPstUNPReg : Str -> Str -> Str -> NPerson -> Number -> Gender -> {s:Str} = \root, root2, na, pn, nu, g -> {s = case of { => root2 + "e" + na + "cu" ; -- एछु => root2 + "i" + na + "cu" ; -- इछु => root2 + "e" + na + "cwV" ; -- एछौँ => root2 + "e" + na + "csx:" ; -- एछस् => root2 + "i" + na + "csx:" ; -- इछस् => root2 + "e" + na + "cw" ; -- एछौ => root2 + "i" + na + "cw" ; -- इछौ => root2 + "e" + na + "cw" ; -- एछौ => root2 + "e" + na + "c" ; -- एछ => root2 + "i" + na + "c" ; -- इछ => root2 + "e" + na + "cnx:" ; -- एछन् => root2 + "i" + na + "cnx:" ; -- इछन् => root2 + "e" + na + "cnx:" ; -- एछन् < _, _, _> => root + "nuBe:" + na +"c" -- नुभएछ } } ; -- mkVPstUNP helper for VIReg case mkVPstUNPIReg : Str -> Str -> Str -> NPerson -> Number -> Gender -> {s:Str} = \root, root2, na, pn, nu, g -> {s = case of { => root2 + "e:" + na + "cu" ; -- एछु => root2 + "i:" + na + "cu" ; -- इछु => root2 + "e:" + na + "cwV" ; -- एछौँ => root2 + "e:" + na + "csx:" ; -- एछस् => root2 + "i:" + na + "csx:" ; -- इछस् => root2 + "e:" + na + "cw" ; -- एछौ => root2 + "i:" + na + "cw" ; -- इछौ => root2 + "e:" + na + "cw" ; -- एछौ => root2 + "e:" + na + "c" ; -- एछ => root2 + "i:" + na + "c" ; -- इछ => root2 + "e:" + na + "cnx:" ; -- एछन् => root2 + "i:" + na + "cnx:" ; -- इछन् => root2 + "e:" + na + "cnx:" ; -- एछन् < _, _, _> => root + "nuBe:" + na +"c" -- नुभएनछ } } ; -} -- Future Definitive, Nonprogressive mode, nonperfective aspect -- Handles Both cases mkVFutDNP : Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, po, pn, n, g -> {s = case of { -- Positive case => root + "necu" ; -- नेछु => root + "necwM" ; -- नेछौं => root + "necsx:" ; -- नेछस् => root + "necwM" ; -- नेछौ => root + "necwM" ; -- नेछौ => root + "nec" ; -- नेछ => root + "necnx:" ; -- नेछन् => root + "necnx:" ; -- नेछन् => root + "necinx:" ; -- नेछिन् => root + "necinx:" ; -- नेछन् => root + "nuhunec" ; -- नुहुनेछ -- Negative Case => root + "necEn" ; -- नेछैन => root + "necEnEV" ; -- नेछैनैँ => root + "necEnsx:" ; -- नेछैनस् => root + "necEnE" ; -- नेछैनै => root + "necEnE" ; -- नेछैनै => root + "necEnx:" ; -- नेछैन् => root + "necEnnx:" ; -- नेछैनन् => root + "necEnnx:" ; -- नेछैनन् => root + "necEnE" ; -- नेछैनै => root + "nuhunecEnx:" -- नुहुनेछैन् } } ; -- Future Nondefinitive, Nonperfective aspect, NonPregressive mode mkVFutNDNP : Str -> Str -> VCase -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root2, vc, po, pn, n, g -> {s = case vc of { VReg => (mkVFutNDNPReg root root2 po pn n g).s ; VIReg => (mkVFutNDNPIReg root2 po pn n g).s } } ; -- mkVFutNDNP helper for VReg case mkVFutNDNPReg : Str -> Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root2, po, pn, n, g -> {s = case of { => root2 + "uVla" ; -- उँला => root2 + "wVla" ; -- आँला => root + "z=lasx:" ; -- लास् => root + "lIsx:" ; -- लिस् => root2 + "wla" ; -- औला => root2 + "wli" ; -- औलि => root + "la" ; -- ला => root + "lI" ; -- ली => root + "lanx:" ; -- लान् => root + "lInx:" ; -- लिन् => root + "lanx:" ; -- लान् => root + "z=nuhola" ; -- नुहोला -- TODO : NOT CLEAR DEFINITION IN BOOK => "quxu" } } ; -- mkVFutNDNP helper for VIReg case mkVFutNDNPIReg : Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, po, pn, n, g -> {s = case of { => root + "fVla" ; -- उँला => root + "WVla" ; -- आँला => root + "lasx:" ; -- लास् => root + "lisx:" ; -- लिस् => root + "Wla" ; -- औला => root + "Wli" ; -- औलि => root + "la" ; -- ला => root + "lI" ; -- ली => root + "lanx:" ; -- लान् => root + "linx:" ; -- लिन् => root + "lanx:" ; -- लान् => root + "nuhola" ; -- नुहोला -- TODO : NOT CLEAR DEFINITION IN BOOK => "quxu" } } ; -- Past Simple, Perfective aspect, Nonprogressive Mode mkVPstSP : Str -> Str -> VCase -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root2, vc, po, pn, n, g -> {s = case vc of { VReg => (mkVPstSPGen root2 "eko" "eki" "eka" po pn n g).s ; VIReg => (mkVPstSPGen root2 "e:ko" "e:ki" "e:ka" po pn n g).s } } ; -- mkVPstSP Helper handles both VReg and VIreg cases mkVPstSPGen : Str -> Str -> Str -> Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, sreg, sfem, spl, po, pn, n, g -> {s = case of { -- Positive case => root + sreg + "Tie:V" ; -- थिएँ => root + spl + "TiywV" ; -- थियौँ => root + sreg + "Tii:sx:" ; -- थिइस् => root + sfem + "Tii:sx:" ; -- थिइस् => root + spl + "Tiyw" ; -- थियौ => root + spl + "Tiyw" ; -- थियौ => root + sreg + "Tiyo" ; -- थियो => root + sfem + "TiI:" ; --थिई => root + spl + "Tie:" ; -- थिए => root + sfem + "Tii:nx:" ; -- थिइन् => root + spl + "Tie:" ; -- थिए => root + sreg + "hunuhunx:z+Tx:yo" ; -- हुनुहुन्‌थ्यो (TODO: CONFIRM CORRECT) -- Negative case => root + sreg +"Tii:nV" ; -- => root + spl + "Tie:nEV" ; -- => root + sreg + "Tii:nsx:" ; -- => root + sfem + "Tii:nsx:" ; -- => root + spl + "Tie:nE" ; -- => root + spl + "TinE" ; -- => root + sreg + "Tie:n" ; -- => root + sfem + "Tii:n:" ; -- => root + spl + "Tie:nnx:" ; -- => root + sfem + "Tii:nnx:" ; -- => root + spl + "Tie:nnx:" ; -- => root + sreg + "hunuhunx:z+nTx:yo" -- हुनुहुन्‌नथ्यो (TODO: CONFIRM CORRECT) } }; -- Past Habitual, Perfective aspect, Nonprogressive Mode mkVPstHP : Str -> Str -> VCase -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root2, vc, po, pn, n, g -> {s = case vc of { VReg => (mkVPstHPGen root2 "eko" "eki" "eka" po pn n g).s ; VIReg => (mkVPstHPGen root2 "e:ko" "e:ki" "e:ka" po pn n g).s } } ; -- mkVPstSP Helper handles both VReg and VIreg cases mkVPstHPGen : Str -> Str -> Str -> Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, sreg, sfem, spl, po, pn, n, g -> {s = case of { => root + sreg + "hunx:TeV" ; -- हुन्थेँ => root + spl + "hunx:TwV" ; -- हुन्थौँ => root + sreg + "hunx:Tisx:" ; -- हुन्थिस् => root + sfem + "hunx:Ti:sx:" ; -- हुन्थिस् => root + spl + "hunx:Tx:yw" ; -- हुन्थ्यौ => root + spl + "hunx:Tx:yw" ; -- हुन्थ्यौ => root + sreg + "hunx:z+Tx:yw" ; -- हुन्‌थ्यौ => root + sfem + "hunx:TI" ; -- हुन्थी => root + spl + "hunx:Te" ; -- हुन्थे => root + sfem + "hunx:z+Ti" ; -- हुन्थि => root + spl + "hunx:Te" ; -- हुन्थे => root + sreg + "hunuhunx:Tx:yo" ; -- (TODO : हुनुहुन्थ्यो need to Confirm) -- Negative case (TODO) => root + sreg + "hunx:TeV" ; -- हुन्थेँ => root + spl + "hunx:TwV" ; -- हुन्थौँ => root + sreg + "hunx:Tii:sx:" ; -- हुन्थिइस् ???? G Check => root + sfem + "hunx:Tii:sx:" ; -- हुन्थिइस् => root + spl + "hunx:Tiyw" ; -- हुन्थियौ / or हुन्थ्यौ (hunx:Tx:yw) => root + spl + "hunx:Tiyw" ; -- हुन्थियौ / or हुन्थ्यौ (hunx:Tx:yw) => root + sreg + "hunx:Tx:yw" ; -- हुन्थ्यौ / (थियो ????) => root + sfem + "hunx:TI" ; -- हुन्थी/ (थिई ????) => root + spl + "hunx:Te" ; -- हुन्थे / (थिए) => root + sfem + "hunx:Ti" ; -- हुन्थि => root + spl + "hunx:Te" ; -- हुन्थे / (थिए) => root + sreg + "hunuhunx:z+nTx:yo" -- हुनुहुन्‌नथ्यो (TODO: CONFIRM CORRECT) } }; {- -- Past Unknown, Perfective aspect, Nonprogressive Mode mkVPstUP : Str -> Str -> VCase -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root2, vc, po, pn, n, g -> {s = case vc of { VReg => (mkVPstHPGen root2 "eko" "eki" "eka" po pn n g).s ; VIReg => (mkVPstHPGen root2 "e:ko" "e:ki" "e:ka" po pn n g).s } } ; -- mkVPstUP Helper handles both VReg and VIreg cases mkVPstUPGen : Str -> Str -> Str -> Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, sreg, sfem, spl, po, pn, n, g -> {s = case of { => root + sreg + "rhecu" ; -- रहेछु => root + sfem + "rhecu" ; -- रहेछु (खाएकिरहेछु) => root + spl + "rhecwV" ; -- रहेछौँ => root + sreg + "rhicsx:" ; --रहिछस् => root + sfem + "rhicsx:" ; --रहिछस् => root + spl + "rhecw" ; -- रहेछौ => root + spl + "rhecw" ; -- रहेछौ => root + sfem + "rhicw" ; -- रहिछौ (छ्यौ ????) => root + spl + "rhecw" ; -- रहेछौ => root + sreg + "rhec" ; -- रहेछ => root + sfem + "rhic" ; -- रहिछ => root + spl + "rhecnx:" ; -- रहेछन् => root + sfem + "rhicInx:" ; -- रहिछीन् => root + spl + "rhecnx:" ; -- रहेछन् => root + spl + "rhecnx:" ; -- रहेछन् => root + sreg + "hunuhudorhec" ; -- हुनुहुदोरहेछ/नुभएकोरहेछ(nuBe:korhec) -- Negative Case (TODO) => "quxu" -- TODO-- } }; -} -- Present, Perfective aspect, Nonprogressive Mode mkVPreP : Str -> Str -> VCase -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root2, vc, po, pn, n, g -> {s = case vc of { VReg => (mkVPreGen root2 "eko" "eki" "eka" po pn n g).s ; VIReg => (mkVPreGen root2 "e:ko" "e:ki" "e:ka" po pn n g).s } } ; -- mkVPreP helper handles both VReg and VIreg cases mkVPreGen : Str -> Str -> Str -> Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, sreg, sfem, spl, po, pn, n, g -> {s = case of { => root + sreg + "cu" ; -- छु => root + spl + "cwM" ; -- छौं => root + sreg + "csx:" ; -- छस् => root + sfem + "cesx:" ; -- छेस् => root + spl + "cw" ; -- छौ => root + sfem + "cx:yw" ; --छ्यौ => root + spl + "cw" ; -- छौ => root + sreg + "c" ; -- छ => root + sfem + "ce" ; -- छे => root + spl + "cnx:" ; -- छन् => root + sfem + "cinx:" ; -- छिन् => root + spl + "cnx:" ; -- छन् => root + sreg + "hunuhunx:c" ; -- हुनुहुन्छ -- Negative Case (TODO) => "quxu" -- TODO-- } }; -- Future Definitive, Perfective aspect, Nonprogressive Mode mkVFutDefP : Str -> Str -> VCase -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root2, vc, po, pn, n, g -> {s = case vc of { VReg => (mkVFutDefGen root2 "eko" "eki" "eka" po pn n g).s ; VIReg => (mkVFutDefGen root2 "e:ko" "e:ki" "e:ka" po pn n g).s } } ; -- mkVFutDef helper handles both VReg and VIreg cases mkVFutDefGen : Str -> Str -> Str -> Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, sreg, sfem, spl, po, pn, n, g -> {s = case of { => root + sreg + ("hune"+"cu") ; -- हुनेछु => root + spl + "hunecwV" ; -- हुनेछौँ => root + sreg + "hunecsx:" ; -- हुनेछस् => root + sfem + "hunecesx:" ; -- हुनेछेस् => root + spl + "hunecw" ; -- हुनेछौ => root + sfem + "hunecx:yw" ; -- हुनेछ्यौ => root + spl + "hunecw" ; -- हुनेछौ => root + sreg + "hunec" ; -- हुनेछ => root + sfem + "hunx:ce" ; -- हुन्छे => root + spl + "hunecnx:" ; -- हुनेछन् => root + sfem + "hunecinx:" ; -- हुनेछिन् => root + spl + "hunecnx:" ; -- हुनेछन् => root + sreg + "hunuhunec" ; -- हुनुहुनेछ -- Negative Case (TODO) => "quxu" -- TODO-- } }; -- Future Nondefinitive, Perfective aspect, Nonprogressive Mode mkVFutNDefP : Str -> Str -> VCase -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, root2, vc, po, pn, n, g -> {s = case vc of { VReg => (mkVFutDefGen root2 "eko" "eki" "eka" po pn n g).s ; VIReg => (mkVFutDefGen root2 "e:ko" "e:ki" "e:ka" po pn n g).s } } ; -- Helper mkVFutNDef handles both VReg and VIreg cases mkVFutNDefGen : Str -> Str -> Str -> Str -> Polarity -> NPerson -> Number -> Gender -> {s:Str} = \root, sreg, sfem, spl, po, pn, n, g -> {s = case of { => root + sreg + "huVla" ; -- हुँला => root + spl + "hwVlaV" ; -- हौँलाँ => root + sreg + "holasx:" ; -- होलास् => root + sfem + "holisx:" ; -- होलिस् => root + spl + "hwla" ; -- हौला => root + sfem + "holi" ; -- होलि => root + spl + "hwla" ; -- हौला => root + sreg + "hola" ; -- होला => root + sfem + "holI" ; -- होली => root + spl + "holanx:" ; -- होलान् => root + sfem + "holinx:" ; -- होलिन् => root + spl + "holanx:" ; -- होलान् => root + sreg + "hunuhola" ; -- हुनुहोला -- Negative Case (TODO) => "quxu" -- TODO-- } }; -- TODO - Refactor IntPronForm = {s: Case => Str}; mkIntPronForm : (x1,x2,x3,x4:Str) -> IntPronForm = \y1,y2,y3,y4 -> { s = table { Nom => y1; _ => y2 } }; }