2016-03-24 20 views
5

sto firmando richieste web, e come parte della stringa di query, ho bisogno di includere oauth_timestamp=123456789 dove il 123456789 è il tempo nominale dal 1970-01-01 00:00 UTC.Haskell: Estratto Int da POSIXTime/NominalDiffTime

Sto usando POSIXTime per la sua rappresentazione, che è solo un alias di tipo per NominalDiffTime.

Si verificano problemi quando si desidera convertire POSIXTime/NominalDiffTime in Testo in modo che sia possibile aggiungerlo alla raccolta di elementi stringa della query.

Il problema deriva dal fatto che il costruttore di NominalDiffTime è privato e quindi non è possibile estrarre il numero effettivo.

Anche il modo hacky di utilizzare show aggiungerà una "s" che genera 123456789s.

C'è un modo semplice per estrarre il numero effettivo da NominalDiffTime?

risposta

5

Questo potrebbe essere un esempio di typeclasses che rende le API più esoteriche di quanto non debbano essere: NominalDiffTime implementa RealFrac, il typeclass di frazioni di precisione arbitraria. Di conseguenza, la funzione floor è a vostra disposizione:

λ> import Data.Time.Clock.POSIX 
λ> pt <- getPOSIXTime 
λ> pt 
1458787669.804632s 
λ> toRational pt 
182348458725579 % 125000 
λ> floor pt :: Int 
1458787669