--# -path=.:abstract:common:prelude

concrete IdiomLav of Idiom = CatLav ** open
  VerbLav,
  ParadigmsLav,
  ResLav,
  Prelude
in {

flags

  coding = utf8 ;
  optimize = all_subs ;

lin

  ImpersCl vp =
    let agr = AgrP3 Sg Masc
    in {
      s = \\mood,pol =>
        buildVerb vp.v mood pol agr Pos vp.rightPol ++  -- Verb
        vp.compl ! agr  -- Object(s), complements, adverbial modifiers
    } ;

  GenericCl vp =
    let agr = AgrP3 Sg Masc
    in {
      s = \\mood,pol =>
        buildVerb vp.v mood pol agr Pos vp.rightPol ++
        vp.compl ! agr
    } ;

  ExistNP np = {
    s = \\mood,pol => buildVerb (mkV "būt") mood pol np.agr np.pol Pos ++ np.s ! Nom
  } ;

  ExistIP ip = {
    s = \\mood,pol => ip.s ! Nom ++ buildVerb (mkV "būt") mood pol (AgrP3 ip.num Masc) Pos Pos
  } ;

  -- FIXME: needs restriction so that only VMood Indicative _ _ Present is allowed;
  -- can't do that on VP level...
  ProgrVP v = v ;

  ImpPl1 vp =
    let agr = AgrP1 Pl Masc
    in {
      s =
        vp.v.s ! Pos ! (VInd P1 Pl Pres) ++  -- Verb
        vp.compl ! agr  -- Object(s), complements, adverbial modifiers
    }
    | { s = vp.v.s ! Pos ! (VInd P1 Pl Fut) ++ vp.compl ! agr }  --# notpresent
    ;

  ImpP3 np vp = {
    s = "lai" ++ np.s ! Nom ++ buildVerb vp.v (Ind Simul Pres) Pos np.agr np.pol vp.rightPol ++ vp.compl ! np.agr ;
  } ;

  -- FIXME: placeholder
  CleftNP np rs = { s = \\_,_ => nonExist } ;
  CleftAdv ad s = { s = \\_,_ => nonExist } ;

}
