@@ -56,6 +56,10 @@ module Dhall.Marshal.Decode
5656 , string
5757 , lazyText
5858 , strictText
59+ -- ** Time
60+ , timeOfDay
61+ , day
62+ , timeZone
5963 -- ** Containers
6064 , maybe
6165 , pair
@@ -168,6 +172,7 @@ import qualified Data.Sequence
168172import qualified Data.Set
169173import qualified Data.Text
170174import qualified Data.Text.Lazy
175+ import qualified Data.Time as Time
171176import qualified Data.Vector
172177import qualified Dhall.Core as Core
173178import qualified Dhall.Map
@@ -312,6 +317,15 @@ instance FromDhall a => FromDhall [a] where
312317instance FromDhall a => FromDhall (Vector a ) where
313318 autoWith opts = vector (autoWith opts)
314319
320+ instance FromDhall Time. TimeOfDay where
321+ autoWith _ = timeOfDay
322+
323+ instance FromDhall Time. Day where
324+ autoWith _ = day
325+
326+ instance FromDhall Time. TimeZone where
327+ autoWith _ = timeZone
328+
315329{-| Note that this instance will throw errors in the presence of duplicates in
316330 the list. To ignore duplicates, use `setIgnoringDuplicates`.
317331-}
@@ -897,6 +911,45 @@ strictText = Decoder {..}
897911
898912 expected = pure Text
899913
914+ {-| Decode `Time.TimeOfDay`
915+
916+ >>> input timeOfDay "00:00:00"
917+ 00:00:00
918+ -}
919+ timeOfDay :: Decoder Time. TimeOfDay
920+ timeOfDay = Decoder {.. }
921+ where
922+ extract (TimeLiteral t _) = pure t
923+ extract expr = typeError expected expr
924+
925+ expected = pure Time
926+
927+ {-| Decode `Time.Day`
928+
929+ >>> input day "2000-01-01"
930+ 2000-01-01
931+ -}
932+ day :: Decoder Time. Day
933+ day = Decoder {.. }
934+ where
935+ extract (DateLiteral d) = pure d
936+ extract expr = typeError expected expr
937+
938+ expected = pure Date
939+
940+ {-| Decode `Time.TimeZone`
941+
942+ >>> input timeZone "+00:00"
943+ +0000
944+ -}
945+ timeZone :: Decoder Time. TimeZone
946+ timeZone = Decoder {.. }
947+ where
948+ extract (TimeZoneLiteral z) = pure z
949+ extract expr = typeError expected expr
950+
951+ expected = pure TimeZone
952+
900953{-| Decode a `Maybe`.
901954
902955>>> input (maybe natural) "Some 1"
0 commit comments