(.module: [library [lux #* ["." time] [abstract [equivalence (#+ Equivalence)] [monad (#+ do)]] [control ["." try (#+ Try)] ["<>" parser ["<.>" text (#+ Parser)]]] [data ["." product] [text ["%" format (#+ Format)]]] [time ["." instant (#+ Instant)]]]] ["." / #_ ["#." date] ["#." time]]) (type: .public Time [/date.Date /time.Time]) (def: .public epoch Time [/date.epoch time.midnight]) (def: .public (instant time) (-> Time Instant) (let [[date time] time] (instant.of_date_time (/date.value date) time))) (def: .public (of_instant instant) (-> Instant (Try Time)) (do try.monad [date (/date.date (instant.date instant))] (in [date (instant.time instant)]))) (def: .public equivalence (Equivalence Time) (product.equivalence /date.equivalence time.equivalence)) (def: .public (format [date time]) (Format Time) (%.format (/date.format date) (/time.format time))) (def: .public parser (Parser Time) (do <>.monad [date /date.parser time /time.parser] (in [date time])))