concrete ExtraBul of ExtraBulAbs = CatBul ** 
  open ResBul, Coordination, Prelude in {

  lin
    PossIndefPron p = {
      s = \\aform => p.gen ! (indefAForm ! aform) ;
      spec = Indef
      } ;
      
    ReflQuant = {
      s = \\aform => reflPron ! aform ;
      spec = Indef
    } ;

    ReflIndefQuant = {
      s = \\aform => reflPron ! (indefAForm ! aform) ;
      spec = Indef
    } ;

    i8fem_Pron  = mkPron "аз" "мен" "ми" "мой" "моя" "моят" "моя" "моята" "мое" "моето" "мои" "моите" (GSg Fem)  P1 ;
    i8neut_Pron = mkPron "аз" "мен" "ми" "мой" "моя" "моят" "моя" "моята" "мое" "моето" "мои" "моите" (GSg Neut) P1 ;
    
    whatSg8fem_IP  = mkIP "каква" "каква" (GSg Fem) ;
    whatSg8neut_IP = mkIP "какво" "какво" (GSg Neut) ;

    whoSg8fem_IP  = mkIP "коя" "кого" (GSg Fem) ;
    whoSg8neut_IP = mkIP "кое" "кого" (GSg Neut) ;
    
    youSg8fem_Pron  = mkPron "ти" "теб" "ти" "твой" "твоя" "твоят" "твоя" "твоята" "твое" "твоето" "твои" "твоите" (GSg Fem) P2 ;
    youSg8neut_Pron = mkPron "ти" "теб" "ти" "твой" "твоя" "твоят" "твоя" "твоята" "твое" "твоето" "твои" "твоите" (GSg Neut) P2 ;
    
    youPol8fem_Pron  = mkPron "вие" "вас" "ви" "ваш" "вашия" "вашият" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" (GSg Fem) P2 ;
    youPol8neut_Pron = mkPron "вие" "вас" "ви" "ваш" "вашия" "вашият" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" (GSg Neut) P2 ;

    onePl_Num = {s = table {
                       DMascIndef | DMascPersonalIndef | DFemIndef | DNeutIndef                             => "едни" ;
                       DMascDef | DMascDefNom | DMascPersonalDef | DMascPersonalDefNom | DFemDef | DNeutDef => "едните"
                     } ;
                 n = Pl;
                 nonEmpty = True
                } ;

    UttImpSg8fem  pol imp = {s = pol.s ++ imp.s ! pol.p ! GSg Fem} ;
    UttImpSg8neut pol imp = {s = pol.s ++ imp.s ! pol.p ! GSg Fem} ;
    
  oper
    reflPron : AForm => Str =
      table {
        ASg Masc Indef => "свой" ;
        ASg Masc Def   => "своя" ;
        ASgMascDefNom  => "своят" ;
        ASg Fem  Indef => "своя" ;
        ASg Fem  Def   => "своята" ;
        ASg Neut Indef => "свое" ;
        ASg Neut Def   => "своето" ;
        APl Indef      => "свои" ;
        APl Def        => "своите"
      } ;
      
    indefAForm : AForm => AForm =
      table {
        ASg g _       => ASg g Indef ;
        ASgMascDefNom => ASg Masc Indef ;
        APl _         => APl Indef
      } ;
} 
