concrete CatSom of Cat = CommonX - [Adv,IAdv] ** open ResSom, Prelude in {

  flags optimize=all_subs ;

  lincat

--2 Sentences and clauses
-- Constructed in SentenceSom, and also in IdiomSom

    S  = ResSom.Sentence ;
    QS = SS ;
    RS = {s : State => GenNum => Case => Str} ;
    -- relative sentence. Tense and polarity fixed,
    -- but agreement may depend on the CN/NP it modifies.

    Cl = ResSom.ClSlash ;
    ClSlash = ResSom.ClSlash ;
    SSlash  = ResSom.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 QuestionSom.

    QCl = ResSom.QClause ;
    IComp = SS ;                -- interrogative complement of copula  e.g. "where"
    IDet = ResSom.Determiner ;  -- interrogative determiner            e.g. "how many"
    IQuant = ResSom.Quant ; -- interrogative quantifier            e.g. "which"
    IP = ResSom.NounPhrase ** {contractSTM : Bool} ;  -- like NP but may contract with STM
    IAdv = ResSom.IAdv ;

--2 Subord clauses and pronouns

    RCl = ResSom.RClause ;
    RP = SS ;

--2 Verb phrases

-- Constructed in VerbSom.

    VP = ResSom.VerbPhrase ;
    VPSlash = ResSom.VPSlash ;
    Comp = ResSom.Complement ;


--2 Adjectival phrases

-- Constructed in AdjectiveSom.

    AP = ResSom.AdjPhrase ;


--2 Nouns and noun phrases

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

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


--2 Numerals

-- Constructed in NumeralSom.

    Card = BaseNum ;
    Numeral = ResSom.Numeral ;
    Digits = {s : CardOrd => Str ; n : Number} ;
    Decimal = {s : CardOrd => Str ; n : Number; hasDot : Bool} ;



--2 Structural words

-- Constructed in StructuralSom.
    Conj = {s2 : State => Str ; s1 : Str ; n : Number } ;
    Subj = SS ;
    Prep = ResSom.Prep ;



--2 Words of open classes

-- These are constructed in LexiconSom 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 = ResSom.Verb ;

    VV = ResSom.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 = ResSom.Verb2 ;
    V3 = ResSom.Verb3 ;

    A = ResSom.Adjective ;
    A2  = ResSom.Adjective2 ;

    N = ResSom.Noun ;
    N2 = ResSom.Noun2 ;
    N3 = ResSom.Noun3 ;
    GN, SN, LN, PN = ResSom.PNoun ;

    Adv = ResSom.Adverb ; -- Adposition of an adverbial can merge with obligatory complements of the verb.

linref
    -- Cl = linCl ;
    VP = infVP ;
    CN = linCN ;
    Prep = \prep -> prep.s ! ZeroObj ++ prep.sii ++ prep.dhex ++ prep.hoostiisa ! Sg3 Masc ;
}
