concrete StructuralMay of Structural = CatMay **
  open Prelude, ResMay, (N=NounMay), ParadigmsMay in {

-------
-- Ad*
lin at_least_AdN = ss "sekurangnya" ;
lin at_most_AdN = ss "paling tua" ;
{-
lin almost_AdA = mkAdA "" ;
lin almost_AdN = ss "" ;
lin so_AdA = ss "" ;
lin too_AdA = ss "" ;
lin very_AdA = mkAdA "" ;

lin as_CAdv = { s = "" ; p = [] } ;
lin less_CAdv = { s = "" ; p = [] } ;
lin more_CAdv = { s = "" ; p = [] } ;

lin how8much_IAdv = ss "" ;
lin when_IAdv = ss "" ;
-}
lin how_IAdv = { s = "bagaimana"; isPre = True ; vf = Active } ;
lin where_IAdv = { s = "mana"; isPre = False ; vf = Root } ;
lin why_IAdv = {s = "mengapa"; isPre = True ; vf = Root } ;
{-


lin always_AdV = ss "" ;

lin everywhere_Adv = ss "" ;
lin here7from_Adv = ss "" ;
lin here7to_Adv = ss "" ;
lin here_Adv = ss "" ;
lin quite_Adv = ss "" ;
lin somewhere_Adv = ss "" ;
lin there7from_Adv = ss "" ;
lin there7to_Adv = ss "" ;
lin there_Adv = ss "" ;

-}
-------
-- Conj

lin and_Conj = {s2 = "dan" ; s1 = [] ; n = Pl} ;
lin or_Conj = {s2 = "atau" ; s1 = [] ; n = Sg} ;
-- lin if_then_Conj = mkConj
-- lin both7and_DConj = mkConj "" "" pl ;
-- lin either7or_DConj = {s2 = \\_ => "" ; s1 = "" ; n = Sg} ;
--
-- lin but_PConj = ss "" ;
-- lin otherwise_PConj = ss "" ;
-- lin therefore_PConj = ss "" ;


-----------------
-- *Det and Quant

lin how8many_IDet = mkIdet "berapa" "berapa banyak" "" Sg True;
lin every_Det = mkDet "semua" "semua" Sg ; -- to check
{-}
lin all_Predet = {s = ""} ;
lin not_Predet = { s = "" } ;
lin only_Predet = { s = "" } ;
lin most_Predet = {s = ""} ;

lin few_Det = R.indefDet "" pl ;
lin many_Det = R.indefDet "" pl ;
lin much_Det = R.indefDet "" sg ;

lin somePl_Det =
lin someSg_Det =

lin no_Quant = -}
lin that_Quant = mkQuant "itu" ;
lin this_Quant = mkQuant "ini" ;
lin which_IQuant = mkQuant "yang mana" ** {isPre = False} ;

-----
-- NP

lin somebody_NP = mkNounPhrase "seorang" ; --todo

{-
lin everybody_NP = defNP "" N.NumPl ;
lin everything_NP = defNP "" N.NumSg ;
lin nobody_NP = mkVerb; ""
lin nothing_NP = defNP "" N.NumSg ;
lin somebody_NP = defNP "" N.NumSg ;
lin something_NP = defNP "" N.NumSg ;

oper
 defNP : Str -> Num -> NP = {} ;
-}

-------
-- Prep

-- lin above_Prep = mkPrep ""
lin after_Prep = mkPrep "selepas" ;
lin before_Prep = mkPrep "sebelum" ;
-- lin behind_Prep = mkPrep ""  ;
-- lin between_Prep = = mkPrep "" ;
lin by8agent_Prep = mkPrep "oleh" ; -- for pronoun agent, see Mintz p. 170, 5.4.1
lin by8means_Prep = mkPrep "dengan" ;
-- lin during_Prep = mkPrep ;
-- lin except_Prep = mkPrep ;
-- lin for_Prep = mkPrep ;
-- lin from_Prep = mkPrep "" ;
-- lin in8front_Prep = mkPrep "" ;
lin in_Prep = mkPrep "di" ;
lin on_Prep = mkPrep "pada" ;
-- lin part_Prep = mkPrep ;
lin possess_Prep = mkPrep [] ; -- TODO check Mintz p. 39-40, 2.2.1.2
-- lin through_Prep = mkPrep ;
-- lin to_Prep = mkPrep "ke"  ;
lin to_Prep =
  let ke : Preposition = mkPrep "ke";
      kepada : Preposition = mkPrep "kepada" ;
  in ke ** {
    obj = kepada.obj
  } ;

-- lin have_V2 = let have' : V2 = mkV2 "ada" in have' ** {
--   s = \\_ => "ada" ;
--   passive = "diadakan" ;
-- } ;
-- lin under_Prep = mkPrep "" ;
lin with_Prep = mkPrep "dengan" ;
-- lin without_Prep = mkPrep "" ;

-------
-- Pron

-- Pronouns are closed class, no constructor in ParadigmsMay.
lin it_Pron = mkPron "dia" P3 ;
lin i_Pron = mkPron "aku" P1 ;
lin youPol_Pron = mkPron "kamu" P2 ;
lin youSg_Pron = mkPron "kamu" P2 ;
lin he_Pron = mkPron "dia" P3 ;
lin she_Pron = mkPron "dia" P3 ;
-- inclusive we
lin we_Pron = mkPron "kita" P1 ;
lin youPl_Pron = mkPron "kamu" P2;
lin they_Pron = mkPron "mereka" P3 ;

--lin whatPl_IP = ;
lin whatSg_IP = mkIP "apa";
--lin whoPl_IP = ;
lin whoSg_IP = mkIP "siapa";

-- expected: {s : ParamMay.Possession => Str; a : ParamMay.NPAgr;
--  empty : Str; sp : ParamMay.NForm => Str}
-------
-- Subj

-- lin although_Subj =
lin because_Subj = ss "kerana" ;
lin if_Subj = ss "sekiranya" ;
lin that_Subj = ss "yang" ;
lin when_Subj = ss "kalau" ;


------
-- Utt

lin language_title_Utt = ss "bahasa Melayu" ;
-- lin no_Utt = ss "" ;
-- lin yes_Utt = ss "" ;


-------
-- Verb

lin have_V2 = let have' : V2 = mkV2 "ada" in have' ** {
  s = \\_ => "ada" ;
  passive = "diadakan" ;
} ;
-- lin can8know_VV = can_VV ; -- can (capacity)
lin can_VV = mkVV "boleh" ;   -- can (possibility)
lin must_VV = mkVV "perlu" ;
lin want_VV = mkVV "mahu" ;

------
-- Voc
{-
lin please_Voc = ss "" ;
-}

}
