concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur in {

  lin
    UseV v = v ;
    SlashV2a v = lin VP v ;

    Slash2V3 v = variants {} ;
    Slash3V3 v = variants {} ;
    SlashV2A v = variants {} ;
    SlashV2V v = variants {} ;
    SlashV2S v = variants {} ;
    SlashV2Q v = variants {} ;
    SlashVV v = variants {} ;
    SlashV2VNP = variants {} ;

    ComplSlash vps np = {
      s = \\ vf => vps.c.s ++ np.s ! vps.c.c ++ vps.s ! vf ;
    } ;

    -- TODO: test this and fix.
    ComplVS vs s = {
      s = \\vf => s.subord ++ vs.s ! vf
    } ;

    ComplVA _ _ = variants {} ;
    ComplVV _ _ = variants {} ;
    ComplVQ _ _ = variants {} ;
    
    UseComp comp = comp ;
    CompCN _ = variants {} ;

    CompNP ap = lin VP {
      s = table {
            VPres   agr => ap.s ! Nom ++ 
                           case agr of {
                             {n=Sg; p=P3} => [] ;
                             _            => suffixStr ap.h (verbSuffixes ! agr)
                           } ;
            VProg   agr => ap.s ! Nom ;
            VPast   agr => ap.s ! Nom ++
                           suffixStr ap.h (alethicCopulaSuffixes ! agr);
            VFuture agr => ap.s ! Nom ++
                           addSuffix "olacağ" (mkHar I_Har (SCon Hard)) (verbSuffixes ! agr) ;
            VInfinitive => ap.s ! Nom ++ "olmak" ;
            _           => "TODO"
          }
    } ;

    CompAP ap = lin VP {
      s = table {
            VPres   agr => case agr.p of {
                             P3 => ap.s ! Sg ! Nom ;
                             _  => ap.s ! agr.n ! Nom ++ suffixStr ap.h (verbSuffixes ! agr)
                           } ;
            VProg   agr => ap.s ! agr.n ! Nom ;
            VPast   agr => ap.s ! agr.n ! Nom ++
                           suffixStr ap.h (alethicCopulaSuffixes ! agr);
            VFuture agr => ap.s ! agr.n ! Nom ++
                           addSuffix "olacağ" (mkHar I_Har (SCon Hard)) (verbSuffixes ! agr) ;
            VInfinitive => ap.s ! Sg ! Nom ++ "olmak" ;
            _           => "TODO"
          }
    } ;

    CompAdv _ = variants {} ;

    ReflVP = variants {} ;
    
    AdvVP = variants {} ;
    AdVVP = variants {} ;

    PassV2 = variants {} ;
}
