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