concrete CatAra of Cat = CommonX - [Utt]  ** open ResAra, Prelude, ParamX in {

  flags optimize=all_subs ;

  lincat

-- Phrase

    Utt = {s : Gender => Str};

-- Tensed/Untensed

    S  = {s : Str} ;
    QS = {s : QForm => Str} ;
--    RS = {s : Agr => Str} ;

-- Sentence

    Cl = {s : ResAra.Tense => Polarity => Order => Str} ;
--    Slash = {s : Tense => Anteriority => Polarity => Order => Str} ** {c2 : Str} ;
    Imp = {s : Polarity => Gender => ResAra.Number => Str} ;

-- Question

    QCl = {s : ResAra.Tense => Polarity => QForm => Str} ;
    IP = {s : Str ; n : ResAra.Number} ;
--    IAdv = {s : Str} ;    
--    IDet = {s : Str ; n : ResAra.Number} ;
--
---- Relative
--
--    RCl = {s : Tense => Anteriority => Polarity => Agr => Str} ;
--    RP = {s : Case => Str ; a : RAgr} ;
--
-- Verb

    VP = ResAra.VP ;
    Comp = ResAra.Comp ; --{s : AAgr => Case => Str} ; 
--    SC = {s : Str} ;
--
-- Adjective

    AP = {s : Species => Gender => NTable } ; 

-- Noun

    CN = ResAra.Noun ** {adj : NTable};
    NP, Pron = ResAra.NP; --{s : Case => Str ; a : Agr } ;
    Num, Ord = {s : Gender => State => Case => Str ;
                n : Size };
    Predet = ResAra.Predet ;

-- DEPRECATED
--    QuantSg, QuantPl = 
--      {s : Species => Gender => Case => Str; 
--       n : ResAra.Number; 
--       d : State; 
--       isNum : Bool;
--       isPron : Bool} ;

    Det = ResAra.Det ;
--  {s : Species => Gender => Case => Str ; 
--   d : State; n : Size; isNum : Bool } ;
    Quant = {s : ResAra.Number => Species => Gender => Case => Str; 
             d : State;
             isNum : Bool;
             isPron: Bool} ;

-- Numeral

    Numeral = {s : CardOrd => Gender => State => Case => Str ; 
               n : Size } ;
    Digits = {s : Str;
              n : Size};

-- Structural

    Conj = {s : Str ; n : ResAra.Number} ;
--    DConj = {s1,s2 : Str ; n : ResAra.Number} ;
--    Subj = {s : Str} ;
    Prep = {s : Str} ;

-- Open lexical classes, e.g. Lexicon
    
    V, VS, VQ, VA = ResAra.Verb ; -- = {s : VForm => Str} ;
    V2, V2A = ResAra.Verb ** {c2 : Str} ;
    V2V, V2S, V2Q = ResAra.Verb ** {c2 : Str} ; --- AR
    V3 = ResAra.Verb ** {c2, c3 : Str} ;
--    VV = {s : VVForm => Str ; isAux : Bool} ;

    A = ResAra.Adj ;
    A2 = ResAra.Adj ** {c2 : Str} ;

    N, N2 = ResAra.Noun ; 
--{s : ResAra.Number => State => Case => Str; g : Gender ; h = Species} ;
--    N2 = {s : ResAra.Number => Case => Str} ** {c2 : Str} ;??
    N3 = ResAra.Noun ** {c2,c3 : Str} ;
    PN = {s : Case => Str; g : Gender; h : Species} ;

}
