-- 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. An additional grant -- of patent rights can be found in the PATENTS file in the same directory. {-# LANGUAGE GADTs #-} module Duckling.Quantity.Helpers ( isSimpleQuantity , quantity , unitOnly , withProduct , withUnit , withValue , withInterval , withMin , withMax ) where import Data.Text (Text) import Prelude import Duckling.Dimensions.Types import Duckling.Quantity.Types (QuantityData(..)) import Duckling.Types import qualified Duckling.Quantity.Types as TQuantity -- ----------------------------------------------------------------- -- Patterns isSimpleQuantity :: Predicate isSimpleQuantity (Token Quantity QuantityData {TQuantity.unit = Just _ , TQuantity.value = Just _}) = True isSimpleQuantity _ = False -- ----------------------------------------------------------------- -- Production quantity :: TQuantity.Unit -> Double -> QuantityData quantity u v = QuantityData {TQuantity.unit = Just u , TQuantity.value = Just v , TQuantity.aproduct = Nothing , TQuantity.minValue = Nothing , TQuantity.maxValue = Nothing} unitOnly :: TQuantity.Unit -> QuantityData unitOnly u = QuantityData {TQuantity.unit = Just u , TQuantity.value = Nothing , TQuantity.aproduct = Nothing , TQuantity.minValue = Nothing , TQuantity.maxValue = Nothing} withProduct :: Text -> QuantityData -> QuantityData withProduct p qd = qd {TQuantity.aproduct = Just p} withUnit :: TQuantity.Unit -> QuantityData -> QuantityData withUnit u qd = qd {TQuantity.unit = Just u} withValue :: Double -> QuantityData -> QuantityData withValue value qd = qd {TQuantity.value = Just value} withInterval :: (Double, Double) -> QuantityData -> QuantityData withInterval (from, to) qd = qd {minValue = Just from, maxValue = Just to} withMin :: Double -> QuantityData -> QuantityData withMin from qd = qd {minValue = Just from} withMax :: Double -> QuantityData -> QuantityData withMax to qd = qd {maxValue = Just to}