concrete QuestionPes of Question = CatPes ** open ResPes, Prelude in {
  flags optimize=all_subs ;
    coding = utf8;

  lin

  QuestCl cl = {
    s = \\t,p => cl.s ! t ! p ! OQuest
    };

  QuestVP qp vp =
   let cl = mkSClause [] (Ag qp.n P3) vp;
    in {s = \\t,p => qp.s ++ cl.s ! t ! p ! ODir} ;

  QuestSlash ip slash = {
    s = \\t,p => slash.subj ++ slash.c2.s ++ ip.s ++ slash.c2.ra
              ++ slash.vp ! t ! p ! ODir
    };

  QuestIAdv iadv cl = {
    s = \\t,p => iadv.s ++ cl.s ! t ! p ! ODir
    };

  QuestIComp icomp np =
   let cl = mkSClause (np2str np ++ icomp.s) np.a (predV beVerb)
    in {s = \\t,p => cl.s ! t ! p ! ODir};

    PrepIP p ip = {s = p.s ++ ip.s } ;

    AdvIP ip adv = {
      s =  ip.s ++ adv.s  ;
      n = ip.n;
      } ;

    IdetCN idet cn = {
      s = case idet.isNum of {
             False => idet.s ++ cn.s ! idet.n ! Bare ;
             True => idet.s ++ cn.s ! Sg ! Bare} ;
	  n = idet.n;
      } ;

    IdetIP idet = idet ;

    IdetQuant iqant num = {
      s = iqant.s  ++ num.s ;
      n = num.n ;
      isNum = True
      } ;

    CompIAdv a = a ;
    CompIP p = ss p.s ;
    AdvIAdv i a = {s =  a.s ++ i.s } ;


}
