{-# 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