{-# LANGUAGE BangPatterns #-} module Data.Time.Ebeats ( EbeatsTime(..) , getEbeatsTime , toEbeatsTime ) where -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- import Data.Fixed (Fixed, E2) import Data.Time (UTCTime(..), getCurrentTime) import Data.Time.LocalTime (TimeOfDay(..), timeToTimeOfDay) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- newtype EbeatsTime = EbeatsTime { ebeatsTimeValue :: Fixed E2 } deriving (Eq, Ord) instance Show EbeatsTime where show = ('@':) . show . ebeatsTimeValue getEbeatsTime :: IO EbeatsTime getEbeatsTime = toEbeatsTime `fmap` getCurrentTime toEbeatsTime :: UTCTime -> EbeatsTime toEbeatsTime utct = let TimeOfDay h m s = timeToTimeOfDay $ utctDayTime utct !ebeats = realToFrac $ s * 5/432 + realToFrac m * 25/36 + realToFrac h * 125/3 in EbeatsTime ebeats