@@ -13,11 +13,8 @@
13-- such as URL pieces, headers and query parameters.
13-- such as URL pieces, headers and query parameters.
14module Web.Internal.HttpApiData where
14module Web.Internal.HttpApiData where
16−#if __GLASGOW_HASKELL__ < 710
16+import Prelude ()
17−import Control.Applicative
17+import Prelude.Compat
18−import Data.Foldable (Foldable)
19−import Data.Traversable (Traversable (traverse))
22import Control.Arrow (left, (&&&))
19import Control.Arrow (left, (&&&))
23import Control.Monad ((<=<))
20import Control.Monad ((<=<))
@@ -33,22 +30,19 @@ import Data.Word
34import Data.Text (Text)
31import Data.Text (Text)
35import qualified Data.Text as T
32import qualified Data.Text as T
36−import Data.Text.Encoding (decodeUtf8With, decodeUtf8', encodeUtf8)
33+import Data.Text.Encoding (decodeUtf8', decodeUtf8With,
37import Data.Text.Encoding.Error (lenientDecode)
35import Data.Text.Encoding.Error (lenientDecode)
38import qualified Data.Text.Lazy as L
36import qualified Data.Text.Lazy as L
39import Data.Text.Read (Reader, decimal, rational,
37import Data.Text.Read (Reader, decimal, rational,
42import Data.Time
40import Data.Time
43−#if __GLASGOW_HASKELL__ < 710
44import Data.Time.Locale.Compat
41import Data.Time.Locale.Compat
46import Data.Version
42import Data.Version
48−#if MIN_VERSION_base(4,8,0)
49import Data.Void
44import Data.Void
50import Numeric.Natural
45import Numeric.Natural
53import Text.ParserCombinators.ReadP (readP_to_S)
47import Text.ParserCombinators.ReadP (readP_to_S)
54import Text.Read (readMaybe)
48import Text.Read (readMaybe)
@@ -432,10 +426,8 @@ instance ToHttpApiData Version where
432 toUrlPiece = T.pack . showVersion
426 toUrlPiece = T.pack . showVersion
433 toEncodedUrlPiece = unsafeToEncodedUrlPiece
427 toEncodedUrlPiece = unsafeToEncodedUrlPiece
435−#if MIN_VERSION_base(4,8,0)
436instance ToHttpApiData Void where toUrlPiece = absurd
429instance ToHttpApiData Void where toUrlPiece = absurd
437instance ToHttpApiData Natural where toUrlPiece = showt; toEncodedUrlPiece = unsafeToEncodedUrlPiece
430instance ToHttpApiData Natural where toUrlPiece = showt; toEncodedUrlPiece = unsafeToEncodedUrlPiece
440instance ToHttpApiData Bool where toUrlPiece = showTextData; toEncodedUrlPiece = unsafeToEncodedUrlPiece
432instance ToHttpApiData Bool where toUrlPiece = showTextData; toEncodedUrlPiece = unsafeToEncodedUrlPiece
441instance ToHttpApiData Ordering where toUrlPiece = showTextData; toEncodedUrlPiece = unsafeToEncodedUrlPiece
433instance ToHttpApiData Ordering where toUrlPiece = showTextData; toEncodedUrlPiece = unsafeToEncodedUrlPiece
@@ -566,7 +558,7 @@ instance FromHttpApiData Char where
566 parseUrlPiece s =
558 parseUrlPiece s =
567 case T.uncons s of
559 case T.uncons s of
568 Just (c, s') | T.null s' -> pure c
560 Just (c, s') | T.null s' -> pure c
569− _ -> defaultParseError s
561+ _ -> defaultParseError s
572-- >>> showVersion <$> parseUrlPiece "1.2.3"
564-- >>> showVersion <$> parseUrlPiece "1.2.3"
@@ -577,7 +569,6 @@ instance FromHttpApiData Version where
577 ((x, ""):_) -> pure x
569 ((x, ""):_) -> pure x
578 _ -> defaultParseError s
570 _ -> defaultParseError s
580−#if MIN_VERSION_base(4,8,0)
581-- | Parsing a @'Void'@ value is always an error, considering @'Void'@ as a data type with no constructors.
572-- | Parsing a @'Void'@ value is always an error, considering @'Void'@ as a data type with no constructors.
582instance FromHttpApiData Void where
573instance FromHttpApiData Void where
583 parseUrlPiece _ = Left "Void cannot be parsed!"
574 parseUrlPiece _ = Left "Void cannot be parsed!"
@@ -588,7 +579,6 @@ instance FromHttpApiData Natural where
589 then Left ("underflow: " <> s <> " (should be a non-negative integer)")
580 then Left ("underflow: " <> s <> " (should be a non-negative integer)")
590 else Right (fromInteger n)
581 else Right (fromInteger n)
593instance FromHttpApiData Bool where parseUrlPiece = parseBoundedUrlPiece
583instance FromHttpApiData Bool where parseUrlPiece = parseBoundedUrlPiece
594instance FromHttpApiData Ordering where parseUrlPiece = parseBoundedUrlPiece
584instance FromHttpApiData Ordering where parseUrlPiece = parseBoundedUrlPiece