Haskell: извлечение Int из POSIXTime / NominalDiffTime


Я подписываю веб-запросы, и в качестве части строки запроса мне нужно включить oauth_timestamp=123456789 где 123456789 - номинальное время с 1970-01-01 00: 00 UTC.

Я использую POSIXTime для его представления, которое является просто псевдонимом типа для NominalDiffTime.

У меня возникают проблемы, когда я хочу преобразовать POSIXTime / NominalDiffTime в текст, чтобы я мог добавить его в коллекцию элементов строки запроса.

Проблема возникает из-за того, что конструктор для NominalDiffTime является частным, и поэтому я не могу извлечь фактическое число.

Даже избитый способ использования show добавит "s", генерируя 123456789s.

Существует ли простой способ извлечения фактического числа из номинального времени?
1 5

1 ответ:

Это можно было бы квалифицировать как пример typeclasses, делающих API более эзотерическими, чем они должны быть: NominalDiffTime реализует RealFrac, типкласс дробей произвольной точности. В результате вам доступна функция floor:

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