content: -- Copyright (c) 2016-present, Facebook, Inc.
  -- All rights reserved.
  --
  -- This source code is licensed under the BSD-style license found in the
  -- LICENSE file in the root directory of this source tree.
  
  
  {-# LANGUAGE GADTs #-}
  {-# LANGUAGE OverloadedStrings #-}
  
  module Duckling.Distance.RU.Rules
    ( rules
    ) where
  
  import Data.String
  import Data.Text (Text)
  import Prelude
  
  import Duckling.Dimensions.Types
  import Duckling.Distance.Helpers
  import Duckling.Distance.Types (DistanceData(..))
  import Duckling.Types
  import qualified Duckling.Distance.Types as TDistance
  
  distances :: [(Text, String, TDistance.Unit)]
  distances = [ ("<latent dist> km", "км|километр(а|ов)?", TDistance.Kilometre)
              , ("<latent dist> feet", "('|фут(а|ов)?)", TDistance.Foot)
              , ("<latent dist> inch", "(\"|''|дюйм(а|ов)?)", TDistance.Inch)
              , ("<latent dist> yard", "ярд(а|ов)?", TDistance.Yard)
              , ("<dist> meters", "м(етр(а|ов)?)?", TDistance.Metre)
              , ("<dist> centimeters", "см|сантиметр(а|ов)?", TDistance.Centimetre)
              , ("<dist> millimeters", "мм|миллиметр(а|ов)?", TDistance.Millimetre)
              , ("<dist> miles", "мил(я|и|ь)", TDistance.Mile)
              ]
  
  ruleDistances :: [Rule]
  ruleDistances = map go distances
    where
      go :: (Text, String, TDistance.Unit) -> Rule
      go (name, regexPattern, u) = Rule
        { name = name
        , pattern = [ dimension Distance, regex regexPattern ]
        , prod = \tokens -> case tokens of
            (Token Distance dd:_) -> Just . Token Distance $ withUnit u dd
            _ -> Nothing
        }
  
  rules :: [Rule]
  rules = ruleDistances
  