concrete CatHun of Cat = CommonX - [Adv] ** open ResHun, Prelude in {

  flags optimize=all_subs ;

  lincat

--2 Sentences and clauses
-- Constructed in SentenceHun, and also in IdiomHun

    S  = ResHun.Sentence ;
    QS = SS ;
    RS = ResHun.RP ;
    -- relative sentence. Tense and polarity fixed,
    -- but agreement may depend on the CN/NP it modifies.

    Cl = ResHun.ClSlash ;
    ClSlash = ResHun.ClSlash ;
    SSlash  = ResHun.Sentence ; -- sentence missing NP; e.g. "she has looked at"
    Imp     = {s : Number => Polarity => Str} ; -- imperative             e.g. "look at this"

--2 Questions and interrogatives

-- Constructed in QuestionHun.

    QCl = ResHun.QClause ;
    IComp = SS ;                -- interrogative complement of copula  e.g. "where"
    IDet = ResHun.Determiner ;  -- interrogative determiner            e.g. "how many"
    IQuant = ResHun.Quant ;     -- interrogative quantifier            e.g. "which"
    IP = ResHun.NounPhrase ;    -- interrogative pronoun               e.g. "who"

--2 Subord clauses and pronouns

    RCl = ResHun.RClause ;
    RP = ResHun.RP ;

--2 Verb phrases

-- Constructed in VerbHun.

    VP = ResHun.VerbPhrase ;
    VPSlash = ResHun.VPSlash ;
    Comp = ResHun.VerbPhrase ;


--2 Adjectival phrases

-- Constructed in AdjectiveHun.

    AP = ResHun.AdjPhrase ;


--2 Nouns and noun phrases

-- Constructed in NounHun.
-- Many atomic noun phrases e.g. "everybody"
-- are constructed in StructuralHun.
-- The determiner structure is
-- ``` Predet (QuantSg | QuantPl Num) Ord
-- as defined in NounHun.

    CN = ResHun.CNoun ;
    NP = ResHun.NounPhrase ;
    Pron = ResHun.Pronoun ; --Pronouns need enough info to turn it into NP or Quant.
    Det = ResHun.Determiner ;
    Predet = {s : Str} ;
    Quant = ResHun.Quant ;
    Num = ResHun.Num ;
    Ord = {
      s : Number => Case => Str ; -- Ord can come from AP and become AP again
      n : Number -- Ord can come from Num, which has inherent number
      } ;
    DAP = ResHun.Determiner ;


--2 Numerals

-- Constructed in NumeralHun.

    Card = ResHun.Numeral ;
    Numeral = ResHun.Numeral ;
    Digits = {s : CardOrd => Str} ;
    Decimal = {s : CardOrd => Str; hasDot : Bool} ;



--2 Structural words

-- Constructed in StructuralHun.
    Conj = ResHun.Conj ;
    Subj = SS ;
    Prep = ResHun.Adposition ;



--2 Words of open classes

-- These are constructed in LexiconHun and in
-- additional lexicon modules.

    VS,    -- sentence-complement verb            e.g. "claim"
    -- TODO: eventually different lincats
    VQ,    -- question-complement verb            e.g. "wonder"
    VA,    -- adjective-complement verb           e.g. "look"
    V = ResHun.Verb ;

    VV,    -- verb-phrase-complement verb         e.g. "want"
    V2A,   -- verb with NP and AP complement      e.g. "paint"
    V2V,   -- verb with NP and V complement       e.g. "cause"
    V2S,   -- verb with NP and S complement       e.g. "tell"
    V2Q,   -- verb with NP and Q complement       e.g. "ask"
    V2 = ResHun.Verb2 ;
    V3 = ResHun.Verb3 ;

    A = ResHun.Adjective ;
    A2  = ResHun.Adjective2 ;

    N,
    N2,
    N3 = ResHun.Noun ;
    PN,LN,GN,SN = ResHun.NounPhrase ;

    Adv = {s : Str ; isPre : Bool} ;

linref
   CN = linCN ;
   NP = linNP ;
   V,VS,VQ,VA = \v -> v.s ! VPres P3 Sg ;
   V2,V3,V2S,V2Q,V2A = \v -> v.s ! Indef ! VPres P3 Sg ;

}
