concrete QuestionGre of Question = CatGre ** open ResGre, Prelude in {

  flags coding= utf8 ;

  lin


   QuestCl cl = {
      s = \\t,a,p => 
            let cls = cl.s ! Main !  t ! a ! p !Ind ;
            in table {
              QDir   => cls  ;
              QIndir => "αν" ++ cls 
              }
            } ;

  
    QuestVP qp vp = {
      s = \\t,a,p => 
            let cl = (predVP (qp.s ! qp.a.g ! Nom) (Ag qp.a.g qp.n P3 ) vp).s ! Main! t ! a! p! Ind
            in table {
              QDir   => cl  ;
              QIndir => cl 
              }
           } ;

    QuestIComp icomp np = { 
      s = \\t,a,p => 
        let 
          vp  = predV copula;
          cl = (predVP (np.s ! Nom).comp  np.a vp).s ! Inv ! t ! a ! p! Ind ;
          why = icomp.s  
        in table {
            QDir   => why ++ cl  ;
            QIndir => why ++ cl 
            }
        } ;




     QuestSlash ip slash = { 
      s = \\t,a,p => 
            let
            agr = Ag ip.a.g ip.n P3 ;
              cls = slash.s  !  ip.a !  Inv !  t ! a ! p!  Ind ++ slash.n3 !agr;
              who =  slash.c2.s ++ ip.s ! Masc ! slash.c2.c      
           in table {
              QDir   => who ++ cls  ;
              QIndir => who ++ cls 
              }
          } ;
   

    QuestIAdv iadv cl = {
      s = \\t,a,p => 
          let 
            cls = cl.s ! Inv  ! t ! a ! p!Ind ; 
            why = iadv.s  
          in table {
              QDir   => why ++ cls  ;
              QIndir => why ++ cls 
              }
          } ;



     CompIAdv a = a ;

  
     CompIP ip = {s =  ip.s !Masc !  Nom} ;

     PrepIP p ip = {
      s = p.s ++ ip.s! Masc ! p.c     
      } ;


      AdvIP ip adv = {
        s = \\g,c => ip.s  ! g! c ++ adv.s ;
        n = ip.n;
        a = ip.a
      } ;
 


      AdvIAdv i a = {s = i.s ++ a.s} ;


      IdetCN idet cn = 
        let
          g= cn.g ;
          n = idet.n;
          a = aagr g n
        in {
            s = \\g,c => idet.s ! cn.g !  c ++ cn.s ! n ! c ;
            n = n ;
            a = a 
        } ;


      IdetQuant idet num = 
        let 
           n = num.n
        in {
          s = \\g,c => idet.s ! n! g ! c ++ num.s !g !c; 
          n = n
        } ;

  
      IdetIP idet = 
        let 
          g = Neut ; 
          n = idet.n ;
          a = aagr g n
        in {
          s = idet.s ;
          n = n ;
          a =a 
      } ;

  
  
  lincat 
    QVP = ResGre.VP ;
  lin
    ComplSlashIP vp ip = insertObject vp.c2 {s = \\c => {
        comp = ip.s ! Masc ! c  ;  
        c1 = [] ; 
        c2 = [] ;
       isClit = False
        } ;a = Ag Masc ip.n  P3;isNeg= False } vp ;


    AdvQVP vp adv = insertAdv adv.s vp ;

    AddAdvQVP vp adv = insertAdv adv.s vp ;

    QuestQVP qp vp = { 
      s = \\t,a,p => 
        let
          cl = (predVP (qp.s ! qp.a.g ! Nom) (Ag qp.a.g qp.n P3 ) vp).s ! Main! t ! a! p! Ind
         in table {
              QDir   => cl  ;
              QIndir => cl 
              }
      } ;  
   



}
