                 , 7 )
  , ( "вісім"                               , 8 )
  , ( "дев‘ять"                   , 9 )
  , ( "десять"                         , 10 )
  , ( "одинадцять" , 11 )
  , ( "дванадцять" , 12 )
  , ( "тринадцять" , 13 )
  , ( "чотирнадцять" , 14 )
  , ( "п‘ятнадцять"       , 15 )
  , ( "шістнадцять"       , 16 )
  , ( "сімнадцять"             , 17 )
  , ( "вісімнадцять" , 18 )
  , ( "дев‘ятнадцять" , 19 )
  ]
ruleInteger4 :: Rule
ruleInteger4 = Rule
  { name = "integer (3..19)"
  , pattern =
    [ regex "(три|чотирнадцять|чотири|п‘ятнадцять|п‘ять|шістнадцять|шість|сімнадцять|сім|вісімнадцять|вісім|дев‘ятнадцять|дев‘ять|десять|одинадцять|дванадцять|тринадцять)"
    ]
  , prod = \tokens -> case tokens of
      (Token RegexMatch (GroupMatch (match:_)):_) ->
        HashMap.lookup (Text.toLower match) threeNineteenMap >>= integer
      _ -> Nothing
  }

ruleInteger2
threeNineteenMap :: HashMap Text Integer
threeNineteenMap = HashMap.fromList
  [ ( "три"                                           , 3 )
  , ( "чотири"                         , 4 )
  , ( "п‘ять"                               , 5 )
  , ( "шість"                               , 6 )
  , ( "сім"                                           , 7 )
  , ( "вісім"                               , 8 )
  , ( "дев‘ять"                   , 9 )
  , ( "десять"                         , 10 )
  , ( "одинадцять" , 11 )
  , ( "дванадцять" , 12 )
  , ( "тринадцять" , 13 )
  , ( "чотирнадцять" , 14 )
  , ( "п‘ятнадцять"       , 15 )
  , ( "шістнадцять"       , 16 )
  , ( "сімнадцять"             , 17 )
  , ( "вісімнадцять" , 18 )
  , ( "дев‘ятнадцять" , 19 )
  ]
threeNineteenMap = HashMap.fromList
  [ ( "три"                                           , 3 )
  , ( "чотири"                         , 4 )
  , ( "п‘ять"                               , 5 )
  , ( "шість"                               , 6 )
  , ( "сім"                                           , 7 )
  , ( "вісім"                               , 8 )
  , ( "дев‘ять"                   , 9 )
  , ( "десять"                         , 10 )
  , ( "одинадцять" , 11 )
  , ( "дванадцять" , 12 )
  , ( "тринадцять" , 13 )
  , ( "чотирнадцять" , 14 )
  , ( "п‘ятнадцять"       , 15 )
  , ( "шістнадцять"       , 16 )
  , ( "сімнадцять"             , 17 )
  , ( "вісімнадцять" , 18 )
  , ( "дев‘ятнадцять" , 19 )
  ]