incomplete concrete VerbRomance of Verb = 
  CatRomance ** open Prelude, CommonRomance, ResRomance in {

  flags optimize=all_subs ;

  lin
    UseV = predV ;

    ComplVV v vp = 
      insertComplement (\\a => prepCase v.c2.c ++ infVP vp a) (predV v) ;
    ComplVS v s  = insertExtrapos (\\b => conjThat ++ s.s ! (v.m ! b)) (predV v) ;
    ComplVQ v q  = insertExtrapos (\\_ => q.s ! QIndir) (predV v) ;
    ComplVA v ap = 
      insertComplement (\\a => let agr = complAgr a in ap.s ! AF agr.g agr.n) (predV v) ;

    SlashV2a v = mkVPSlash v.c2 (predV v) ;

    Slash2V3 v np = mkVPSlash v.c3 (insertObject v.c2 np (predV v)) ;
    Slash3V3 v np = mkVPSlash v.c2 (insertObject v.c3 np (predV v)) ;

    SlashV2V v vp = 
      mkVPSlash v.c2
       (insertComplement 
         (\\a => v.c3.s ++ prepCase v.c3.c ++ infVP vp a) 
         (predV v)) ; 

    SlashV2S v s = 
      mkVPSlash v.c2
       (insertExtrapos 
         (\\b => conjThat ++ s.s ! Indic) ---- mood
         (predV v)) ; 

    SlashV2Q v q = 
      mkVPSlash v.c2
       (insertExtrapos 
         (\\_ => q.s ! QIndir)
         (predV v)) ; 

    {- ---- lincat should be fixed
    SlashV2A v ap = 

      let af = case v.c3.isDir of {
        True => AF np.a.g np.a.n ;  -- ... bleues
        _ => AF Masc Sg             -- il les peint en bleu
        }
    -}

    SlashV2A v ap = 
      let af = AF Masc Sg
      in
      mkVPSlash v.c2
        (insertComplement 
          (\\_ => v.c3.s ++ prepCase v.c3.c ++ ap.s ! af)
          (predV v)) ;

    ComplSlash vp np = insertObject vp.c2 np vp ;

    ReflVP v = case v.c2.isDir of {
      True  => insertRefl v ;
      False => insertComplement 
                 (\\a => let agr = verbAgr a in v.c2.s ++ reflPron agr.n  agr.p v.c2.c) v
      } ;

    SlashVV v vp = 
      mkVPSlash vp.c2
        (insertComplement (\\a => prepCase v.c2.c ++ infVP vp a) (predV v)) ;

    SlashV2VNP v np vps = let obj = np.s ! v.c2.c in { 
      s     = v ;
      agr   = getVPAgr v ;
      clit1 = obj.c1 ; 
      clit2 = obj.c2 ; 
      clit3 = {s,imp = [] ; hasClit = False} ; ---- shortcut from insertObject, to check AR 20/11/2013 
      isNeg = False ;  
      neg   = negation ;
      comp  = \\a => v.c2.s ++ obj.comp ++ prepCase v.c3.c ++ infVP vps a ;
      ext   = \\p => [] ;
      c2    = vps.c2
      } ;

{-  ---- this takes ages to compile, hence inlined as above AR 20/11/2013 
    SlashV2VNP v np vp = 
      mkVPSlash vp.c2
       (insertComplement 
         (\\a => prepCase v.c3.c ++ infVP vp a) 
         (insertObject v.c2 np (predV v))) ; 
-}


    UseComp comp = insertComplement comp.s (predV (selectCopula comp.cop)) ;

    UseCopula = predV copula ;

    CompAP ap = {s = \\ag => let agr = complAgr ag in ap.s ! AF agr.g agr.n ; cop = serCopula} ;
    CompCN cn = { s = \\ag => 
        let agr = complAgr ag in 
        artIndef False cn.g agr.n Nom ++ cn.s ! agr.n ;
      cop = serCopula
      }; --- RE 7/12/2010 -- AR added indef 2/8/2011
    CompNP np = {s = \\_  => (np.s ! Nom).ton ; cop = serCopula} ;
    CompAdv a = {s = \\_  => a.s ; cop = estarCopula} ;

    AdvVP vp adv = insertAdv adv.s vp ;
    ExtAdvVP vp adv = insertAdv (embedInCommas adv.s) vp ;

    AdVVP adv vp = insertAdV adv.s vp ;

    PassV2 v = insertComplement 
      (\\a => let agr = complAgr a in v.s ! VPart agr.g agr.n) (predV auxPassive) ;

    VPSlashPrep vp prep = vp ** {
      c2 = {s = prep.s ; c = prep.c ; isDir = False}
      } ;
}

