= integer >>= notOkForAnyTime)
      _ -> Nothing
  }

tensMap :: HashMap Text Integer
tensMap = HashMap.fromList
  [ ( "ოცი"         , 20 )
  , ( "ოცდა"        , 20 )
  , ( "ოც"          , 20 )
  , ( "ოცდაათ"      , 30 )
  , ( "ოცდაათი"     , 30 )
  , ( "ორმოც"       , 40 )
  , ( "ორმოცი"      , 40 )
  , ( "ორმოცდა"     , 40 )
  , ( "ორმოცდაათ"   , 50 )
  , ( "ორმოცდაათი"  , 50 )
  , ( "სამოც"       , 60 )
  , ( "სამოცი"      , 60 )
  , ( "სამოცდა"     , 60 )
  , ( "სამოცდაათ"   , 70 )
  , ( "სამოცდაათი"  , 70 )
  , ( "ოთხმოც"      , 80 )
  , ( "ოთხმოცი"     , 80 )
  , ( "ოთხმოცდა"    , 80 )
  , ( "ოთხმოცდაათ"  , 90 )
  , ( "ოთხმოცდაათი" , 90 )
  ]

ruleTens :: Rule
ruleTens = Rule
  { name = "integer (20..90)"
  , pattern =
    [ regex "(ოცდაათი?|ორმოცდაათი?|სამოცდაათი?|ოთხმოცდაათი?|ოცდა|ორმოცდა|სამოცდა|ოთხმოცდა|ოცი?|ორმოცი?|სამოცი?|ოთხმოცი?)"
    ]
ruleToNineteen :: Rule
ruleToNineteen = Rule
  { name = "integer (0..19)"
  , pattern =
    [ regex "(წყვილ(ებ)?ი|ცოტა|რამდენიმე|რამოდენიმე|ნოლი?|ნული?|ერთი|ორი?|სამი?|ოთხი?|ხუთი?|ექვსი?|შვიდი?|რვა|თერთმეტი?|თორმეტი?|ცამეტი?|თოთხმეტი?|თხუთმეტი?|თექვსმეტი?|ჩვიდმეტი?|თვრამეტი?|ცხრამეტი?|ცხრა|ა?ათი)"
    ]
  , prod = \case
      (Token RegexMatch (GroupMatch (match:_)):_) ->
        let x = Text.toLower match in
        (HashMap.lookup x zeroNineteenMap >>= integer) <|>
        (HashMap.lookup x informalMap >>= integer >>= notOkForAnyTime)
      _ -> Nothing
  }
ruleToNineteen = Rule
  { name = "integer (0..19)"
  , pattern =
    [ regex "(წყვილ(ებ)?ი|ცოტა|რამდენიმე|რამოდენიმე|ნოლი?|ნული?|ერთი|ორი?|სამი?|ოთხი?|ხუთი?|ექვსი?|შვიდი?|რვა|თერთმეტი?|თორმეტი?|ცამეტი?|თოთხმეტი?|თხუთმეტი?|თექვსმეტი?|ჩვიდმეტი?|თვრამეტი?|ცხრამეტი?|ცხრა|ა?ათი)"
    ]
  , prod = \case
      (Token RegexMatch (GroupMatch (match:_)):_) ->
        let x = Text.toLower match in
        (HashMap.lookup x zeroNineteenMap >>= integer) <|>
        (HashMap.lookup x informalMap >>= integer >>= notOkForAnyTime)
      _ -> Nothing
  }