concrete NounTel of Noun = CatTel ** open ResTel, Prelude in { lin DetCN det cn = { s = \\c => det.s ! cn.g ! npcase2case c ++ toNP (cn.s ! det.n) c ; a = agrP3 cn.g det.n } ; UsePN pn = {s = \\c => toNP pn.s c ; a = agrP3 pn.g Sg} ; UsePron p = {s = \\c => p.s ! np2pronCase c ; a = p.a} ; PredetNP pred np = { s = \\c => pred.s ++ np.s ! c ; a = np.a } ; PPartNP np v2 = { s = \\c => np.s ! c ++ v2.s ! VStem ; a = np.a } ; AdvNP np adv = { s = \\c => adv.s ++ np.s ! c ; a = np.a } ; ExtAdvNP np adv = { s = \\c => np.s ! c ++ "," ++ adv.s ; a = np.a } ; DetQuantOrd quant num ord = { s = \\g,c => quant.s ! num.n ! g ! c ++ num.s ! Neutr ++ ord.s ; n = num.n } ; DetQuant quant num = { s = \\g,c => quant.s ! num.n ! g ! c ++ num.s ! g ; n = num.n } ; PossPron p = {s = \\_,_,_ => p.s ! PPoss} ; NumSg = {s = \\_ => [] ; n = Sg} ; NumPl = {s = \\_ => [] ; n = Pl} ; OrdSuperl a = {s = "అత్యంత" ++ a.s ! Masc ! Sg ! Dir} ; NumCard n = n ; NumDecimal n = {s = \\_ => n.s ; n = n.n} ; AdNum adn card = {s = \\g => adn.s ++ card.s ! g ; n = card.n} ; OrdNumeral numeral = {s = numeral.s ! Neutr} ; OrdDigits digits = {s = digits.s ++ "వ"} ; NumNumeral numeral = numeral ; DetDAP det = {s = det.s ; n = det.n} ; AdjDAP dap ap = { s = \\g,c => ap.s ! g ! dap.n ! c ++ dap.s ! g ! c ; n = dap.n } ; DefArt = {s = \\_,_,_ => []} ; IndefArt = {s = \\_,_,_ => []} ; MassNP cn = {s = \\c => cn.s ! Sg ! npcase2case c ; a = agrP3 cn.g Sg} ; UseN n = n ; UseN2 n = n ; ComplN2 f x = { s = \\n,c => x.s ! NPC c ++ f.c2 ++ f.s ! n ! c ; g = f.g } ; AdjCN ap cn = { s = \\n,c => ap.s ! cn.g ! n ! c ++ cn.s ! n ! c ; g = cn.g } ; RelCN cn rs = { s = \\n,c => rs.s ++ cn.s ! n ! c ; g = cn.g } ; AdvCN cn ad = {s = \\n,c => ad.s ++ cn.s ! n ! c ; g = cn.g} ; SentCN cn sc = {s = \\n,c => sc.s ++ cn.s ! n ! c ; g = cn.g} ; PossNP cn np = { s = \\n,c => np.s ! NPC Obl ++ cn.s ! n ! c ; g = cn.g } ; PartNP cn np = { s = \\n,c => np.s ! NPC Obl ++ cn.s ! n ! c ; g = cn.g } ; CountNP det np = { s = \\c => np.s ! NPC Obl ++ "లో" ++ det.s ! Neutr ! npcase2case c ; a = agrP3 Neutr det.n } ; QuantityNP decimal mu = { s = \\_ => case mu.isPre of { True => mu.s ++ decimal.s ; False => decimal.s ++ mu.s } ; a = agrP3 Neutr Pl } ; ApposCN cn np = { s = \\n,c => cn.s ! n ! c ++ np.s ! NPC Dir ; g = cn.g } ; RelNP np rs = { s = \\c => rs.s ++ np.s ! c ; a = np.a } ; }