@@ -39,6 +39,11 @@ import Data.Text.Read (Reader, decimal, rational,
3939
4040import Data.Time
4141import Data.Time.Locale.Compat
42+
43+#if MIN_VERSION_time(1,9,1)
44+import Data.Time (nominalDiffTimeToSeconds, secondsToNominalDiffTime)
45+#endif
46+
4247import Data.Version
4348
4449import Data.Void
@@ -486,8 +491,28 @@ instance ToHttpApiData UTCTime where
486491 toUrlPiece = timeToUrlPiece "%H:%M:%S%QZ"
487492 toEncodedUrlPiece = unsafeToEncodedUrlPiece
488493
494+-- The CPP in both this function and the function after it are to avoid
495+-- exporting @nominalDiffTimeToSeconds@ and @secondsToNominalDiffTime@,
496+-- since these names are already used by @Data.Time@ from the @time@ library
497+-- starting in version @1.9.1@.
498+nominalDiffTimeToSecs :: NominalDiffTime -> F.Pico
499+nominalDiffTimeToSecs =
500+#if !MIN_VERSION_time(1,9,1)
501+ realToFrac
502+#else
503+ nominalDiffTimeToSeconds
504+#endif
505+
506+secsToNominalDiffTime :: F.Pico -> NominalDiffTime
507+secsToNominalDiffTime =
508+#if !MIN_VERSION_time(1,9,1)
509+ realToFrac
510+#else
511+ secondsToNominalDiffTime
512+#endif
513+
489514instance ToHttpApiData NominalDiffTime where
490− toUrlPiece = toUrlPiece . (floor :: NominalDiffTime -> Integer)
515+ toUrlPiece = toUrlPiece . nominalDiffTimeToSecs
491516 toEncodedUrlPiece = unsafeToEncodedUrlPiece
492517
493518instance ToHttpApiData String where toUrlPiece = T.pack
@@ -630,7 +655,7 @@ instance FromHttpApiData ZonedTime where parseUrlPiece = runAtto Atto.zonedTime
630655-- Right 2015-10-03 00:14:24 UTC
631656instance FromHttpApiData UTCTime where parseUrlPiece = runAtto Atto.utcTime
632657
633−instance FromHttpApiData NominalDiffTime where parseUrlPiece = fmap fromInteger . parseUrlPiece
658+instance FromHttpApiData NominalDiffTime where parseUrlPiece = fmap secsToNominalDiffTime . parseUrlPiece
634659
635660instance FromHttpApiData All where parseUrlPiece = fmap All . parseUrlPiece
636661instance FromHttpApiData Any where parseUrlPiece = fmap Any . parseUrlPiece