ulid-0.1.0.0: src/Data/ULID/TimeStamp.hs
module Data.ULID.TimeStamp (
ULIDTimeStamp,
mkULIDTimeStamp,
getULIDTimeStamp
) where
import Data.Time.Clock
import Data.Time.Clock.POSIX
import Data.ULID.Crockford
-- UNIX time in milliseconds
newtype ULIDTimeStamp = ULIDTimeStamp Integer
deriving (Eq, Ord)
-- | Generate a ULID Timestamp based on a specified time
mkULIDTimeStamp :: POSIXTime -- ^ The specified UNIX time (seconds) to millisecond precision, e.g. 1469918176.385
-> ULIDTimeStamp
mkULIDTimeStamp = ULIDTimeStamp . round . (*1000)
-- | Generate a ULID Timestamp based on current system UNIX time
getULIDTimeStamp :: IO ULIDTimeStamp
getULIDTimeStamp = mkULIDTimeStamp <$> getPOSIXTime
instance Show ULIDTimeStamp where
show (ULIDTimeStamp i) = encode 10 i
instance Read ULIDTimeStamp where
readsPrec _ = map (\(c,r)->(ULIDTimeStamp c, r)) . decode 10