duckling/Duckling/Time/Corpus.hs
Julien Odent bef7a44fa8 Remove redundant brackets and language pragmas
Summary: .

Reviewed By: JonCoens

Differential Revision: D6838082

fbshipit-source-id: 94757bdb80c6d3c29a7a6554429940a1b7403108
2018-01-29 16:45:28 -08:00

58 lines
1.9 KiB
Haskell

-- 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 NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
module Duckling.Time.Corpus
( datetime
, datetimeInterval
, datetimeOpenInterval
, examples
) where
import Data.Aeson
import qualified Data.HashMap.Strict as H
import Data.Text (Text)
import qualified Data.Time.LocalTime.TimeZone.Series as Series
import Prelude
import Data.String
import Duckling.Resolve
import Duckling.Testing.Types hiding (examples)
import Duckling.Time.Types hiding (Month)
import Duckling.TimeGrain.Types hiding (add)
import Duckling.Types hiding (Entity(..))
datetime :: Datetime -> Grain -> Context -> SingleTimeValue
datetime d g ctx =
timeValue tzSeries TimeObject {start = dt d, end = Nothing, grain = g}
where
DucklingTime (Series.ZoneSeriesTime _ tzSeries) = referenceTime ctx
datetimeInterval :: (Datetime, Datetime) -> Grain -> Context -> SingleTimeValue
datetimeInterval (d1, d2) g ctx = timeValue tzSeries TimeObject
{start = dt d1, end = Just $ dt d2, grain = g}
where
DucklingTime (Series.ZoneSeriesTime _ tzSeries) = referenceTime ctx
datetimeOpenInterval
:: IntervalDirection -> Datetime -> Grain -> Context -> SingleTimeValue
datetimeOpenInterval dir d g ctx = openInterval tzSeries dir TimeObject
{start = dt d, end = Nothing, grain = g}
where
DucklingTime (Series.ZoneSeriesTime _ tzSeries) = referenceTime ctx
check :: ToJSON a => (Context -> a) -> TestPredicate
check f context Resolved{jsonValue} = case jsonValue of
Object o -> toJSON (f context) == (Object $ H.delete "values" o)
_ -> False
examples :: ToJSON a => (Context -> a) -> [Text] -> [Example]
examples f = examplesCustom (check f)