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


module Duckling.Rules.EN
  ( defaultRules
  , langRules
  , localeRules
  ) where

import Prelude

import Duckling.Dimensions.Types
import Duckling.Locale
import Duckling.Types
import qualified Duckling.AmountOfMoney.EN.Rules as AmountOfMoney
import qualified Duckling.AmountOfMoney.EN.AU.Rules as AmountOfMoneyAU
import qualified Duckling.AmountOfMoney.EN.BZ.Rules as AmountOfMoneyBZ
import qualified Duckling.AmountOfMoney.EN.CA.Rules as AmountOfMoneyCA
import qualified Duckling.AmountOfMoney.EN.GB.Rules as AmountOfMoneyGB
import qualified Duckling.AmountOfMoney.EN.IE.Rules as AmountOfMoneyIE
import qualified Duckling.AmountOfMoney.EN.IN.Rules as AmountOfMoneyIN
import qualified Duckling.AmountOfMoney.EN.JM.Rules as AmountOfMoneyJM
import qualified Duckling.AmountOfMoney.EN.NZ.Rules as AmountOfMoneyNZ
import qualified Duckling.AmountOfMoney.EN.PH.Rules as AmountOfMoneyPH
import qualified Duckling.AmountOfMoney.EN.TT.Rules as AmountOfMoneyTT
import qualified Duckling.AmountOfMoney.EN.US.Rules as AmountOfMoneyUS
import qualified Duckling.AmountOfMoney.EN.ZA.Rules as AmountOfMoneyZA
import qualified Duckling.Distance.EN.Rules as Distance
import qualified Duckling.Duration.EN.Rules as Duration
import qualified Duckling.Email.EN.Rules as Email
import qualified Duckling.Numeral.EN.Rules as Numeral
import qualified Duckling.Ordinal.EN.Rules as Ordinal
import qualified Duckling.Quantity.EN.Rules as Quantity
import qualified Duckling.Region as R
import qualified Duckling.Temperature.EN.Rules as Temperature
import qualified Duckling.Time.EN.Rules as Time
import qualified Duckling.Time.EN.AU.Rules as TimeAU
import qualified Duckling.Time.EN.BZ.Rules as TimeBZ
import qualified Duckling.Time.EN.CA.Rules as TimeCA
import qualified Duckling.Time.EN.GB.Rules as TimeGB
import qualified Duckling.Time.EN.IE.Rules as TimeIE
import qualified Duckling.Time.EN.IN.Rules as TimeIN
import qualified Duckling.Time.EN.JM.Rules as TimeJM
import qualified Duckling.Time.EN.NZ.Rules as TimeNZ
import qualified Duckling.Time.EN.PH.Rules as TimePH
import qualified Duckling.Time.EN.TT.Rules as TimeTT
import qualified Duckling.Time.EN.US.Rules as TimeUS
import qualified Duckling.Time.EN.ZA.Rules as TimeZA
import qualified Duckling.TimeGrain.EN.Rules as TimeGrain
import qualified Duckling.Volume.EN.Rules as Volume

defaultRules :: Seal Dimension -> [Rule]
defaultRules :: Seal Dimension -> [Rule]
defaultRules dim :: Seal Dimension
dim@(Seal Dimension a
Time) = [Rule]
TimeUS.rulesBackwardCompatible [Rule] -> [Rule] -> [Rule]
forall a. [a] -> [a] -> [a]
++ Seal Dimension -> [Rule]
langRules Seal Dimension
dim
defaultRules Seal Dimension
dim             = Seal Dimension -> [Rule]
langRules Seal Dimension
dim

localeRules :: Region -> Seal Dimension -> [Rule]
localeRules :: Region -> Seal Dimension -> [Rule]
localeRules Region
AU (Seal Dimension a
AmountOfMoney) = [Rule]
AmountOfMoneyAU.rules
localeRules Region
BZ (Seal Dimension a
AmountOfMoney) = [Rule]
AmountOfMoneyBZ.rules
localeRules Region
R.CA (Seal Dimension a
AmountOfMoney) = [Rule]
AmountOfMoneyCA.rules
localeRules Region
GB (Seal Dimension a
AmountOfMoney) = [Rule]
AmountOfMoneyGB.rules
localeRules Region
IE (Seal Dimension a
AmountOfMoney) = [Rule]
AmountOfMoneyIE.rules
localeRules Region
IN (Seal Dimension a
AmountOfMoney) = [Rule]
AmountOfMoneyIN.rules
localeRules Region
JM (Seal Dimension a
AmountOfMoney) = [Rule]
AmountOfMoneyJM.rules
localeRules Region
NZ (Seal Dimension a
AmountOfMoney) = [Rule]
AmountOfMoneyNZ.rules
localeRules Region
PH (Seal Dimension a
AmountOfMoney) = [Rule]
AmountOfMoneyPH.rules
localeRules Region
TT (Seal Dimension a
AmountOfMoney) = [Rule]
AmountOfMoneyTT.rules
localeRules Region
US (Seal Dimension a
AmountOfMoney) = [Rule]
AmountOfMoneyUS.rules
localeRules Region
ZA (Seal Dimension a
AmountOfMoney) = [Rule]
AmountOfMoneyZA.rules
localeRules Region
AU (Seal Dimension a
Time) = [Rule]
TimeAU.rules
localeRules Region
BZ (Seal Dimension a
Time) = [Rule]
TimeBZ.rules
localeRules Region
R.CA (Seal Dimension a
Time) = [Rule]
TimeCA.rules
localeRules Region
GB (Seal Dimension a
Time) = [Rule]
TimeGB.rules
localeRules Region
IE (Seal Dimension a
Time) = [Rule]
TimeIE.rules
localeRules Region
IN (Seal Dimension a
Time) = [Rule]
TimeIN.rules
localeRules Region
JM (Seal Dimension a
Time) = [Rule]
TimeJM.rules
localeRules Region
NZ (Seal Dimension a
Time) = [Rule]
TimeNZ.rules
localeRules Region
PH (Seal Dimension a
Time) = [Rule]
TimePH.rules
localeRules Region
TT (Seal Dimension a
Time) = [Rule]
TimeTT.rules
localeRules Region
US (Seal Dimension a
Time) = [Rule]
TimeUS.rules
localeRules Region
ZA (Seal Dimension a
Time) = [Rule]
TimeZA.rules
localeRules Region
region (Seal (CustomDimension a
dim)) = Region -> a -> [Rule]
forall a. CustomDimension a => Region -> a -> [Rule]
dimLocaleRules Region
region a
dim
localeRules Region
_ Seal Dimension
_ = []

langRules :: Seal Dimension -> [Rule]
langRules :: Seal Dimension -> [Rule]
langRules (Seal Dimension a
AmountOfMoney) = [Rule]
AmountOfMoney.rules
langRules (Seal Dimension a
CreditCardNumber) = []
langRules (Seal Dimension a
Distance) = [Rule]
Distance.rules
langRules (Seal Dimension a
Duration) = [Rule]
Duration.rules
langRules (Seal Dimension a
Email) = [Rule]
Email.rules
langRules (Seal Dimension a
Numeral) = [Rule]
Numeral.rules
langRules (Seal Dimension a
Ordinal) = [Rule]
Ordinal.rules
langRules (Seal Dimension a
PhoneNumber) = []
langRules (Seal Dimension a
Quantity) = [Rule]
Quantity.rules
langRules (Seal Dimension a
RegexMatch) = []
langRules (Seal Dimension a
Temperature) = [Rule]
Temperature.rules
langRules (Seal Dimension a
Time) = [Rule]
Time.rules
langRules (Seal Dimension a
TimeGrain) = [Rule]
TimeGrain.rules
langRules (Seal Dimension a
Url) = []
langRules (Seal Dimension a
Volume) = [Rule]
Volume.rules
langRules (Seal (CustomDimension a
dim)) = Lang -> a -> [Rule]
forall a. CustomDimension a => Lang -> a -> [Rule]
dimLangRules Lang
EN a
dim