http-api-data-0.6: Converting to/from HTTP API data like URL pieces, headers and query parameters.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Web.HttpApiData

Description

Convert Haskell values to and from HTTP API data such as URL pieces, headers and query parameters.

Synopsis

Examples

Booleans:

>>> toUrlPiece True
"true"
>>> parseUrlPiece "false" :: Either Text Bool
Right False
>>> parseUrlPieces ["true", "false", "undefined"] :: Either Text [Bool]
Left "could not parse: `undefined'"

Numbers:

>>> toQueryParam 45.2
"45.2"
>>> parseQueryParam "452" :: Either Text Int
Right 452
>>> toQueryParams [1..5] :: [Text]
["1","2","3","4","5"]
>>> parseQueryParams ["127", "255"] :: Either Text [Int8]
Left "out of bounds: `255' (should be between -128 and 127)"

Strings:

>>> toHeader "hello"
"hello"
>>> parseHeader "world" :: Either Text String
Right "world"

Calendar day:

>>> toQueryParam (fromGregorian 2015 10 03)
"2015-10-03"
>>> toGregorian <$> parseQueryParam "2016-12-01"
Right (2016,12,1)

Classes

class ToHttpApiData a where #

Convert value to HTTP API data.

WARNING: Do not derive this using DeriveAnyClass as the generated instance will loop indefinitely.

Minimal complete definition

toUrlPiece | toQueryParam

Methods

toUrlPiece :: a -> Text #

Convert to URL path piece.

toEncodedUrlPiece :: a -> Builder #

Convert to a URL path piece, making sure to encode any special chars. The default definition uses urlEncodeBuilder False but this may be overriden with a more efficient version.

toHeader :: a -> ByteString #

Convert to HTTP header value.

toQueryParam :: a -> Text #

Convert to query param value.

toEncodedQueryParam :: a -> Builder #

Convert to URL query param, The default definition uses urlEncodeBuilder True but this may be overriden with a more efficient version.

Since: 0.5.1

Instances

Instances details
ToHttpApiData All # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: All -> Text #

toEncodedUrlPiece :: All -> Builder #

toHeader :: All -> ByteString #

toQueryParam :: All -> Text #

toEncodedQueryParam :: All -> Builder #

ToHttpApiData Any # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Any -> Text #

toEncodedUrlPiece :: Any -> Builder #

toHeader :: Any -> ByteString #

toQueryParam :: Any -> Text #

toEncodedQueryParam :: Any -> Builder #

ToHttpApiData Version #
>>> toUrlPiece (Version [1, 2, 3] [])
"1.2.3"
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Version -> Text #

toEncodedUrlPiece :: Version -> Builder #

toHeader :: Version -> ByteString #

toQueryParam :: Version -> Text #

toEncodedQueryParam :: Version -> Builder #

ToHttpApiData Void # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Void -> Text #

toEncodedUrlPiece :: Void -> Builder #

toHeader :: Void -> ByteString #

toQueryParam :: Void -> Text #

toEncodedQueryParam :: Void -> Builder #

ToHttpApiData Int16 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Int16 -> Text #

toEncodedUrlPiece :: Int16 -> Builder #

toHeader :: Int16 -> ByteString #

toQueryParam :: Int16 -> Text #

toEncodedQueryParam :: Int16 -> Builder #

ToHttpApiData Int32 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Int32 -> Text #

toEncodedUrlPiece :: Int32 -> Builder #

toHeader :: Int32 -> ByteString #

toQueryParam :: Int32 -> Text #

toEncodedQueryParam :: Int32 -> Builder #

ToHttpApiData Int64 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Int64 -> Text #

toEncodedUrlPiece :: Int64 -> Builder #

toHeader :: Int64 -> ByteString #

toQueryParam :: Int64 -> Text #

toEncodedQueryParam :: Int64 -> Builder #

ToHttpApiData Int8 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Int8 -> Text #

toEncodedUrlPiece :: Int8 -> Builder #

toHeader :: Int8 -> ByteString #

toQueryParam :: Int8 -> Text #

toEncodedQueryParam :: Int8 -> Builder #

ToHttpApiData Word16 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Word16 -> Text #

toEncodedUrlPiece :: Word16 -> Builder #

toHeader :: Word16 -> ByteString #

toQueryParam :: Word16 -> Text #

toEncodedQueryParam :: Word16 -> Builder #

ToHttpApiData Word32 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Word32 -> Text #

toEncodedUrlPiece :: Word32 -> Builder #

toHeader :: Word32 -> ByteString #

toQueryParam :: Word32 -> Text #

toEncodedQueryParam :: Word32 -> Builder #

ToHttpApiData Word64 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Word64 -> Text #

toEncodedUrlPiece :: Word64 -> Builder #

toHeader :: Word64 -> ByteString #

toQueryParam :: Word64 -> Text #

toEncodedQueryParam :: Word64 -> Builder #

ToHttpApiData Word8 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Word8 -> Text #

toEncodedUrlPiece :: Word8 -> Builder #

toHeader :: Word8 -> ByteString #

toQueryParam :: Word8 -> Text #

toEncodedQueryParam :: Word8 -> Builder #

ToHttpApiData SetCookie #

Note: this instance works correctly for alphanumeric name and value

>>> let Right c = parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookie
>>> toUrlPiece c
"SESSID=r2t5uvjq435r4q7ib3vtdjq120"
>>> toHeader c
"SESSID=r2t5uvjq435r4q7ib3vtdjq120"
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: SetCookie -> Text #

toEncodedUrlPiece :: SetCookie -> Builder #

toHeader :: SetCookie -> ByteString #

toQueryParam :: SetCookie -> Text #

toEncodedQueryParam :: SetCookie -> Builder #

ToHttpApiData Ordering # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Ordering -> Text #

toEncodedUrlPiece :: Ordering -> Builder #

toHeader :: Ordering -> ByteString #

toQueryParam :: Ordering -> Text #

toEncodedQueryParam :: Ordering -> Builder #

ToHttpApiData Text # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Text -> Text #

toEncodedUrlPiece :: Text -> Builder #

toHeader :: Text -> ByteString #

toQueryParam :: Text -> Text #

toEncodedQueryParam :: Text -> Builder #

ToHttpApiData Text # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Text -> Text0 #

toEncodedUrlPiece :: Text -> Builder #

toHeader :: Text -> ByteString #

toQueryParam :: Text -> Text0 #

toEncodedQueryParam :: Text -> Builder #

ToHttpApiData Day #
>>> toUrlPiece (fromGregorian 2015 10 03)
"2015-10-03"
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Day -> Text #

toEncodedUrlPiece :: Day -> Builder #

toHeader :: Day -> ByteString #

toQueryParam :: Day -> Text #

toEncodedQueryParam :: Day -> Builder #

ToHttpApiData Month #
>>> import Data.Time.Calendar.Month.Compat (Month (..))
>>> MkMonth 24482
2040-03
>>> toUrlPiece $ MkMonth 24482
"2040-03"
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Month -> Text #

toEncodedUrlPiece :: Month -> Builder #

toHeader :: Month -> ByteString #

toQueryParam :: Month -> Text #

toEncodedQueryParam :: Month -> Builder #

ToHttpApiData Quarter #
>>> import Data.Time.Calendar.Quarter.Compat (Quarter (..))
>>> MkQuarter 8040
2010-Q1
>>> toUrlPiece $ MkQuarter 8040
"2010-q1"
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Quarter -> Text #

toEncodedUrlPiece :: Quarter -> Builder #

toHeader :: Quarter -> ByteString #

toQueryParam :: Quarter -> Text #

toEncodedQueryParam :: Quarter -> Builder #

ToHttpApiData QuarterOfYear #
>>> toUrlPiece Q4
"q4"
Instance details

Defined in Web.Internal.HttpApiData

ToHttpApiData DayOfWeek #
>>> toUrlPiece Monday
"monday"
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: DayOfWeek -> Text #

toEncodedUrlPiece :: DayOfWeek -> Builder #

toHeader :: DayOfWeek -> ByteString #

toQueryParam :: DayOfWeek -> Text #

toEncodedQueryParam :: DayOfWeek -> Builder #

ToHttpApiData NominalDiffTime # 
Instance details

Defined in Web.Internal.HttpApiData

ToHttpApiData UTCTime #
>>> toUrlPiece $ UTCTime (fromGregorian 2015 10 03) 864.5
"2015-10-03T00:14:24.500Z"
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: UTCTime -> Text #

toEncodedUrlPiece :: UTCTime -> Builder #

toHeader :: UTCTime -> ByteString #

toQueryParam :: UTCTime -> Text #

toEncodedQueryParam :: UTCTime -> Builder #

ToHttpApiData LocalTime #
>>> toUrlPiece $ LocalTime (fromGregorian 2015 10 03) (TimeOfDay 14 55 21.687)
"2015-10-03T14:55:21.687"
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: LocalTime -> Text #

toEncodedUrlPiece :: LocalTime -> Builder #

toHeader :: LocalTime -> ByteString #

toQueryParam :: LocalTime -> Text #

toEncodedQueryParam :: LocalTime -> Builder #

ToHttpApiData TimeOfDay #
>>> toUrlPiece $ TimeOfDay 14 55 23.1
"14:55:23.100"
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: TimeOfDay -> Text #

toEncodedUrlPiece :: TimeOfDay -> Builder #

toHeader :: TimeOfDay -> ByteString #

toQueryParam :: TimeOfDay -> Text #

toEncodedQueryParam :: TimeOfDay -> Builder #

ToHttpApiData ZonedTime #
>>> toUrlPiece $ ZonedTime (LocalTime (fromGregorian 2015 10 03) (TimeOfDay 14 55 51.001)) utc
"2015-10-03T14:55:51.001Z"
>>> toUrlPiece $ ZonedTime (LocalTime (fromGregorian 2015 10 03) (TimeOfDay 14 55 51.001)) (TimeZone 120 True "EET")
"2015-10-03T14:55:51.001+02:00"
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: ZonedTime -> Text #

toEncodedUrlPiece :: ZonedTime -> Builder #

toHeader :: ZonedTime -> ByteString #

toQueryParam :: ZonedTime -> Text #

toEncodedQueryParam :: ZonedTime -> Builder #

ToHttpApiData UUID # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: UUID -> Text #

toEncodedUrlPiece :: UUID -> Builder #

toHeader :: UUID -> ByteString #

toQueryParam :: UUID -> Text #

toEncodedQueryParam :: UUID -> Builder #

ToHttpApiData String # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: String -> Text #

toEncodedUrlPiece :: String -> Builder #

toHeader :: String -> ByteString #

toQueryParam :: String -> Text #

toEncodedQueryParam :: String -> Builder #

ToHttpApiData Integer # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Integer -> Text #

toEncodedUrlPiece :: Integer -> Builder #

toHeader :: Integer -> ByteString #

toQueryParam :: Integer -> Text #

toEncodedQueryParam :: Integer -> Builder #

ToHttpApiData Natural # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Natural -> Text #

toEncodedUrlPiece :: Natural -> Builder #

toHeader :: Natural -> ByteString #

toQueryParam :: Natural -> Text #

toEncodedQueryParam :: Natural -> Builder #

ToHttpApiData () #
>>> toUrlPiece ()
"_"
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: () -> Text #

toEncodedUrlPiece :: () -> Builder #

toHeader :: () -> ByteString #

toQueryParam :: () -> Text #

toEncodedQueryParam :: () -> Builder #

ToHttpApiData Bool # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Bool -> Text #

toEncodedUrlPiece :: Bool -> Builder #

toHeader :: Bool -> ByteString #

toQueryParam :: Bool -> Text #

toEncodedQueryParam :: Bool -> Builder #

ToHttpApiData Char # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Char -> Text #

toEncodedUrlPiece :: Char -> Builder #

toHeader :: Char -> ByteString #

toQueryParam :: Char -> Text #

toEncodedQueryParam :: Char -> Builder #

ToHttpApiData Double # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Double -> Text #

toEncodedUrlPiece :: Double -> Builder #

toHeader :: Double -> ByteString #

toQueryParam :: Double -> Text #

toEncodedQueryParam :: Double -> Builder #

ToHttpApiData Float # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Float -> Text #

toEncodedUrlPiece :: Float -> Builder #

toHeader :: Float -> ByteString #

toQueryParam :: Float -> Text #

toEncodedQueryParam :: Float -> Builder #

ToHttpApiData Int # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Int -> Text #

toEncodedUrlPiece :: Int -> Builder #

toHeader :: Int -> ByteString #

toQueryParam :: Int -> Text #

toEncodedQueryParam :: Int -> Builder #

ToHttpApiData Word # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Word -> Text #

toEncodedUrlPiece :: Word -> Builder #

toHeader :: Word -> ByteString #

toQueryParam :: Word -> Text #

toEncodedQueryParam :: Word -> Builder #

ToHttpApiData a => ToHttpApiData (Identity a) #

Since: 0.4.2

Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Identity a -> Text #

toEncodedUrlPiece :: Identity a -> Builder #

toHeader :: Identity a -> ByteString #

toQueryParam :: Identity a -> Text #

toEncodedQueryParam :: Identity a -> Builder #

ToHttpApiData a => ToHttpApiData (First a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: First a -> Text #

toEncodedUrlPiece :: First a -> Builder #

toHeader :: First a -> ByteString #

toQueryParam :: First a -> Text #

toEncodedQueryParam :: First a -> Builder #

ToHttpApiData a => ToHttpApiData (Last a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Last a -> Text #

toEncodedUrlPiece :: Last a -> Builder #

toHeader :: Last a -> ByteString #

toQueryParam :: Last a -> Text #

toEncodedQueryParam :: Last a -> Builder #

ToHttpApiData a => ToHttpApiData (First a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: First a -> Text #

toEncodedUrlPiece :: First a -> Builder #

toHeader :: First a -> ByteString #

toQueryParam :: First a -> Text #

toEncodedQueryParam :: First a -> Builder #

ToHttpApiData a => ToHttpApiData (Last a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Last a -> Text #

toEncodedUrlPiece :: Last a -> Builder #

toHeader :: Last a -> ByteString #

toQueryParam :: Last a -> Text #

toEncodedQueryParam :: Last a -> Builder #

ToHttpApiData a => ToHttpApiData (Max a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Max a -> Text #

toEncodedUrlPiece :: Max a -> Builder #

toHeader :: Max a -> ByteString #

toQueryParam :: Max a -> Text #

toEncodedQueryParam :: Max a -> Builder #

ToHttpApiData a => ToHttpApiData (Min a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Min a -> Text #

toEncodedUrlPiece :: Min a -> Builder #

toHeader :: Min a -> ByteString #

toQueryParam :: Min a -> Text #

toEncodedQueryParam :: Min a -> Builder #

ToHttpApiData a => ToHttpApiData (Dual a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Dual a -> Text #

toEncodedUrlPiece :: Dual a -> Builder #

toHeader :: Dual a -> ByteString #

toQueryParam :: Dual a -> Text #

toEncodedQueryParam :: Dual a -> Builder #

ToHttpApiData a => ToHttpApiData (Product a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Product a -> Text #

toEncodedUrlPiece :: Product a -> Builder #

toHeader :: Product a -> ByteString #

toQueryParam :: Product a -> Text #

toEncodedQueryParam :: Product a -> Builder #

ToHttpApiData a => ToHttpApiData (Sum a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Sum a -> Text #

toEncodedUrlPiece :: Sum a -> Builder #

toHeader :: Sum a -> ByteString #

toQueryParam :: Sum a -> Text #

toEncodedQueryParam :: Sum a -> Builder #

ToHttpApiData a => ToHttpApiData (Maybe a) #
>>> toUrlPiece (Just "Hello")
"just Hello"
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Maybe a -> Text #

toEncodedUrlPiece :: Maybe a -> Builder #

toHeader :: Maybe a -> ByteString #

toQueryParam :: Maybe a -> Text #

toEncodedQueryParam :: Maybe a -> Builder #

(ToHttpApiData a, ToHttpApiData b) => ToHttpApiData (Either a b) #
>>> toUrlPiece (Left "err" :: Either String Int)
"left err"
>>> toUrlPiece (Right 3 :: Either String Int)
"right 3"
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Either a b -> Text #

toEncodedUrlPiece :: Either a b -> Builder #

toHeader :: Either a b -> ByteString #

toQueryParam :: Either a b -> Text #

toEncodedQueryParam :: Either a b -> Builder #

HasResolution a => ToHttpApiData (Fixed a) #

Note: this instance is not polykinded

Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Fixed a -> Text #

toEncodedUrlPiece :: Fixed a -> Builder #

toHeader :: Fixed a -> ByteString #

toQueryParam :: Fixed a -> Text #

toEncodedQueryParam :: Fixed a -> Builder #

ToHttpApiData a => ToHttpApiData (Const a b) #

Since: 0.4.2

Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Const a b -> Text #

toEncodedUrlPiece :: Const a b -> Builder #

toHeader :: Const a b -> ByteString #

toQueryParam :: Const a b -> Text #

toEncodedQueryParam :: Const a b -> Builder #

ToHttpApiData a => ToHttpApiData (Tagged b a) #

Note: this instance is not polykinded

Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Tagged b a -> Text #

toEncodedUrlPiece :: Tagged b a -> Builder #

toHeader :: Tagged b a -> ByteString #

toQueryParam :: Tagged b a -> Text #

toEncodedQueryParam :: Tagged b a -> Builder #

class FromHttpApiData a where #

Parse value from HTTP API data.

WARNING: Do not derive this using DeriveAnyClass as the generated instance will loop indefinitely.

Minimal complete definition

parseUrlPiece | parseQueryParam

Methods

parseUrlPiece :: Text -> Either Text a #

Parse URL path piece.

parseHeader :: ByteString -> Either Text a #

Parse HTTP header value.

parseQueryParam :: Text -> Either Text a #

Parse query param value.

Instances

Instances details
FromHttpApiData All # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text All #

parseHeader :: ByteString -> Either Text All #

parseQueryParam :: Text -> Either Text All #

FromHttpApiData Any # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Any #

parseHeader :: ByteString -> Either Text Any #

parseQueryParam :: Text -> Either Text Any #

FromHttpApiData Version #
>>> showVersion <$> parseUrlPiece "1.2.3"
Right "1.2.3"
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Version #

parseHeader :: ByteString -> Either Text Version #

parseQueryParam :: Text -> Either Text Version #

FromHttpApiData Void #

Parsing a Void value is always an error, considering Void as a data type with no constructors.

Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Void #

parseHeader :: ByteString -> Either Text Void #

parseQueryParam :: Text -> Either Text Void #

FromHttpApiData Int16 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Int16 #

parseHeader :: ByteString -> Either Text Int16 #

parseQueryParam :: Text -> Either Text Int16 #

FromHttpApiData Int32 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Int32 #

parseHeader :: ByteString -> Either Text Int32 #

parseQueryParam :: Text -> Either Text Int32 #

FromHttpApiData Int64 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Int64 #

parseHeader :: ByteString -> Either Text Int64 #

parseQueryParam :: Text -> Either Text Int64 #

FromHttpApiData Int8 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Int8 #

parseHeader :: ByteString -> Either Text Int8 #

parseQueryParam :: Text -> Either Text Int8 #

FromHttpApiData Word16 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Word16 #

parseHeader :: ByteString -> Either Text Word16 #

parseQueryParam :: Text -> Either Text Word16 #

FromHttpApiData Word32 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Word32 #

parseHeader :: ByteString -> Either Text Word32 #

parseQueryParam :: Text -> Either Text Word32 #

FromHttpApiData Word64 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Word64 #

parseHeader :: ByteString -> Either Text Word64 #

parseQueryParam :: Text -> Either Text Word64 #

FromHttpApiData Word8 # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Word8 #

parseHeader :: ByteString -> Either Text Word8 #

parseQueryParam :: Text -> Either Text Word8 #

FromHttpApiData SetCookie #

Note: this instance works correctly for alphanumeric name and value

>>> parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookie
Right (SetCookie {setCookieName = "SESSID", setCookieValue = "r2t5uvjq435r4q7ib3vtdjq120", setCookiePath = Nothing, setCookieExpires = Nothing, setCookieMaxAge = Nothing, setCookieDomain = Nothing, setCookieHttpOnly = False, setCookieSecure = False, setCookieSameSite = Nothing})
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text SetCookie #

parseHeader :: ByteString -> Either Text SetCookie #

parseQueryParam :: Text -> Either Text SetCookie #

FromHttpApiData Ordering # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Ordering #

parseHeader :: ByteString -> Either Text Ordering #

parseQueryParam :: Text -> Either Text Ordering #

FromHttpApiData Text # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Text #

parseHeader :: ByteString -> Either Text Text #

parseQueryParam :: Text -> Either Text Text #

FromHttpApiData Text # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text0 -> Either Text0 Text #

parseHeader :: ByteString -> Either Text0 Text #

parseQueryParam :: Text0 -> Either Text0 Text #

FromHttpApiData Day #
>>> toGregorian <$> parseUrlPiece "2016-12-01"
Right (2016,12,1)
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Day #

parseHeader :: ByteString -> Either Text Day #

parseQueryParam :: Text -> Either Text Day #

FromHttpApiData Month #
>>> parseUrlPiece "2021-01" :: Either Text Month
Right 2021-01
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Month #

parseHeader :: ByteString -> Either Text Month #

parseQueryParam :: Text -> Either Text Month #

FromHttpApiData Quarter #
>>> parseUrlPiece "2021-q1" :: Either Text Quarter
Right 2021-Q1
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Quarter #

parseHeader :: ByteString -> Either Text Quarter #

parseQueryParam :: Text -> Either Text Quarter #

FromHttpApiData QuarterOfYear #
>>> parseUrlPiece "q2" :: Either Text QuarterOfYear
Right Q2
>>> parseUrlPiece "Q3" :: Either Text QuarterOfYear
Right Q3
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text QuarterOfYear #

parseHeader :: ByteString -> Either Text QuarterOfYear #

parseQueryParam :: Text -> Either Text QuarterOfYear #

FromHttpApiData DayOfWeek #
>>> parseUrlPiece "Monday" :: Either Text DayOfWeek
Right Monday
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text DayOfWeek #

parseHeader :: ByteString -> Either Text DayOfWeek #

parseQueryParam :: Text -> Either Text DayOfWeek #

FromHttpApiData NominalDiffTime # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text NominalDiffTime #

parseHeader :: ByteString -> Either Text NominalDiffTime #

parseQueryParam :: Text -> Either Text NominalDiffTime #

FromHttpApiData UTCTime #
>>> parseUrlPiece "2015-10-03T00:14:24Z" :: Either Text UTCTime
Right 2015-10-03 00:14:24 UTC
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text UTCTime #

parseHeader :: ByteString -> Either Text UTCTime #

parseQueryParam :: Text -> Either Text UTCTime #

FromHttpApiData LocalTime #
>>> parseUrlPiece "2015-10-03T14:55:01" :: Either Text LocalTime
Right 2015-10-03 14:55:01
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text LocalTime #

parseHeader :: ByteString -> Either Text LocalTime #

parseQueryParam :: Text -> Either Text LocalTime #

FromHttpApiData TimeOfDay #
>>> parseUrlPiece "14:55:01.333" :: Either Text TimeOfDay
Right 14:55:01.333
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text TimeOfDay #

parseHeader :: ByteString -> Either Text TimeOfDay #

parseQueryParam :: Text -> Either Text TimeOfDay #

FromHttpApiData ZonedTime #
>>> parseUrlPiece "2015-10-03T14:55:01+0000" :: Either Text ZonedTime
Right 2015-10-03 14:55:01 +0000
>>> parseQueryParam "2016-12-31T01:00:00Z" :: Either Text ZonedTime
Right 2016-12-31 01:00:00 +0000
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text ZonedTime #

parseHeader :: ByteString -> Either Text ZonedTime #

parseQueryParam :: Text -> Either Text ZonedTime #

FromHttpApiData UUID # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text UUID #

parseHeader :: ByteString -> Either Text UUID #

parseQueryParam :: Text -> Either Text UUID #

FromHttpApiData String # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text String #

parseHeader :: ByteString -> Either Text String #

parseQueryParam :: Text -> Either Text String #

FromHttpApiData Integer # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Integer #

parseHeader :: ByteString -> Either Text Integer #

parseQueryParam :: Text -> Either Text Integer #

FromHttpApiData Natural # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Natural #

parseHeader :: ByteString -> Either Text Natural #

parseQueryParam :: Text -> Either Text Natural #

FromHttpApiData () #
>>> parseUrlPiece "_" :: Either Text ()
Right ()
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text () #

parseHeader :: ByteString -> Either Text () #

parseQueryParam :: Text -> Either Text () #

FromHttpApiData Bool # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Bool #

parseHeader :: ByteString -> Either Text Bool #

parseQueryParam :: Text -> Either Text Bool #

FromHttpApiData Char # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Char #

parseHeader :: ByteString -> Either Text Char #

parseQueryParam :: Text -> Either Text Char #

FromHttpApiData Double # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Double #

parseHeader :: ByteString -> Either Text Double #

parseQueryParam :: Text -> Either Text Double #

FromHttpApiData Float # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Float #

parseHeader :: ByteString -> Either Text Float #

parseQueryParam :: Text -> Either Text Float #

FromHttpApiData Int # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Int #

parseHeader :: ByteString -> Either Text Int #

parseQueryParam :: Text -> Either Text Int #

FromHttpApiData Word # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Word #

parseHeader :: ByteString -> Either Text Word #

parseQueryParam :: Text -> Either Text Word #

FromHttpApiData a => FromHttpApiData (Identity a) #

Since: 0.4.2

Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (Identity a) #

parseHeader :: ByteString -> Either Text (Identity a) #

parseQueryParam :: Text -> Either Text (Identity a) #

FromHttpApiData a => FromHttpApiData (First a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (First a) #

parseHeader :: ByteString -> Either Text (First a) #

parseQueryParam :: Text -> Either Text (First a) #

FromHttpApiData a => FromHttpApiData (Last a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (Last a) #

parseHeader :: ByteString -> Either Text (Last a) #

parseQueryParam :: Text -> Either Text (Last a) #

FromHttpApiData a => FromHttpApiData (First a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (First a) #

parseHeader :: ByteString -> Either Text (First a) #

parseQueryParam :: Text -> Either Text (First a) #

FromHttpApiData a => FromHttpApiData (Last a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (Last a) #

parseHeader :: ByteString -> Either Text (Last a) #

parseQueryParam :: Text -> Either Text (Last a) #

FromHttpApiData a => FromHttpApiData (Max a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (Max a) #

parseHeader :: ByteString -> Either Text (Max a) #

parseQueryParam :: Text -> Either Text (Max a) #

FromHttpApiData a => FromHttpApiData (Min a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (Min a) #

parseHeader :: ByteString -> Either Text (Min a) #

parseQueryParam :: Text -> Either Text (Min a) #

FromHttpApiData a => FromHttpApiData (Dual a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (Dual a) #

parseHeader :: ByteString -> Either Text (Dual a) #

parseQueryParam :: Text -> Either Text (Dual a) #

FromHttpApiData a => FromHttpApiData (Product a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (Product a) #

parseHeader :: ByteString -> Either Text (Product a) #

parseQueryParam :: Text -> Either Text (Product a) #

FromHttpApiData a => FromHttpApiData (Sum a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (Sum a) #

parseHeader :: ByteString -> Either Text (Sum a) #

parseQueryParam :: Text -> Either Text (Sum a) #

FromHttpApiData a => FromHttpApiData (LenientData a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (LenientData a) #

parseHeader :: ByteString -> Either Text (LenientData a) #

parseQueryParam :: Text -> Either Text (LenientData a) #

FromHttpApiData a => FromHttpApiData (Maybe a) #
>>> parseUrlPiece "Just 123" :: Either Text (Maybe Int)
Right (Just 123)
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (Maybe a) #

parseHeader :: ByteString -> Either Text (Maybe a) #

parseQueryParam :: Text -> Either Text (Maybe a) #

(FromHttpApiData a, FromHttpApiData b) => FromHttpApiData (Either a b) #
>>> parseUrlPiece "Right 123" :: Either Text (Either String Int)
Right (Right 123)
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (Either a b) #

parseHeader :: ByteString -> Either Text (Either a b) #

parseQueryParam :: Text -> Either Text (Either a b) #

HasResolution a => FromHttpApiData (Fixed a) #

Note: this instance is not polykinded

Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (Fixed a) #

parseHeader :: ByteString -> Either Text (Fixed a) #

parseQueryParam :: Text -> Either Text (Fixed a) #

FromHttpApiData a => FromHttpApiData (Const a b) #

Since: 0.4.2

Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (Const a b) #

parseHeader :: ByteString -> Either Text (Const a b) #

parseQueryParam :: Text -> Either Text (Const a b) #

FromHttpApiData a => FromHttpApiData (Tagged b a) #

Note: this instance is not polykinded

Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (Tagged b a) #

parseHeader :: ByteString -> Either Text (Tagged b a) #

parseQueryParam :: Text -> Either Text (Tagged b a) #

Maybe parsers

parseUrlPieceMaybe :: FromHttpApiData a => Text -> Maybe a #

Parse URL path piece in a Maybe.

>>> parseUrlPieceMaybe "12" :: Maybe Int
Just 12

parseHeaderMaybe :: FromHttpApiData a => ByteString -> Maybe a #

Parse HTTP header value in a Maybe.

>>> parseHeaderMaybe "hello" :: Maybe Text
Just "hello"

parseQueryParamMaybe :: FromHttpApiData a => Text -> Maybe a #

Parse query param value in a Maybe.

>>> parseQueryParamMaybe "true" :: Maybe Bool
Just True

Prefix parsers

parseUrlPieceWithPrefix :: FromHttpApiData a => Text -> Text -> Either Text a #

Case insensitive.

Parse given text case insensitive and then parse the rest of the input using parseUrlPiece.

>>> parseUrlPieceWithPrefix "Just " "just 10" :: Either Text Int
Right 10
>>> parseUrlPieceWithPrefix "Left " "left" :: Either Text Bool
Left "could not parse: `left'"

This can be used to implement FromHttpApiData for single field constructors:

>>> data Foo = Foo Int deriving (Show)
>>> instance FromHttpApiData Foo where parseUrlPiece s = Foo <$> parseUrlPieceWithPrefix "Foo " s
>>> parseUrlPiece "foo 1" :: Either Text Foo
Right (Foo 1)

parseHeaderWithPrefix :: FromHttpApiData a => ByteString -> ByteString -> Either Text a #

Parse given bytestring then parse the rest of the input using parseHeader.

data BasicAuthToken = BasicAuthToken Text deriving (Show)

instance FromHttpApiData BasicAuthToken where
  parseHeader h     = BasicAuthToken <$> parseHeaderWithPrefix "Basic " h
  parseQueryParam p = BasicAuthToken <$> parseQueryParam p
>>> parseHeader "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" :: Either Text BasicAuthToken
Right (BasicAuthToken "QWxhZGRpbjpvcGVuIHNlc2FtZQ==")

parseQueryParamWithPrefix :: FromHttpApiData a => Text -> Text -> Either Text a #

Case insensitive.

Parse given text case insensitive and then parse the rest of the input using parseQueryParam.

>>> parseQueryParamWithPrefix "z" "z10" :: Either Text Int
Right 10

Multiple URL pieces

toUrlPieces :: (Functor t, ToHttpApiData a) => t a -> t Text #

Convert multiple values to a list of URL pieces.

>>> toUrlPieces [1, 2, 3] :: [Text]
["1","2","3"]

parseUrlPieces :: (Traversable t, FromHttpApiData a) => t Text -> Either Text (t a) #

Parse multiple URL pieces.

>>> parseUrlPieces ["true", "false"] :: Either Text [Bool]
Right [True,False]
>>> parseUrlPieces ["123", "hello", "world"] :: Either Text [Int]
Left "could not parse: `hello' (input does not start with a digit)"

Multiple query params

toQueryParams :: (Functor t, ToHttpApiData a) => t a -> t Text #

Convert multiple values to a list of query parameter values.

>>> toQueryParams [fromGregorian 2015 10 03, fromGregorian 2015 12 01] :: [Text]
["2015-10-03","2015-12-01"]

parseQueryParams :: (Traversable t, FromHttpApiData a) => t Text -> Either Text (t a) #

Parse multiple query parameters.

>>> parseQueryParams ["1", "2", "3"] :: Either Text [Int]
Right [1,2,3]
>>> parseQueryParams ["64", "128", "256"] :: Either Text [Word8]
Left "out of bounds: `256' (should be between 0 and 255)"

Parsers for Bounded Enums

parseBoundedUrlPiece :: (ToHttpApiData a, Bounded a, Enum a) => Text -> Either Text a #

Case insensitive.

Parse values case insensitively based on ToHttpApiData instance. Uses toUrlPiece to get possible values.

parseBoundedQueryParam :: (ToHttpApiData a, Bounded a, Enum a) => Text -> Either Text a #

Case insensitive.

Parse values case insensitively based on ToHttpApiData instance. Uses toQueryParam to get possible values.

parseBoundedHeader :: (ToHttpApiData a, Bounded a, Enum a) => ByteString -> Either Text a #

Parse values based on ToHttpApiData instance. Uses toHeader to get possible values.

parseBoundedEnumOf :: (Bounded a, Enum a) => (a -> Text) -> Text -> Either Text a #

Parse values based on a precalculated mapping of their Text representation.

>>> parseBoundedEnumOf toUrlPiece "true" :: Either Text Bool
Right True

For case insensitive parser see parseBoundedEnumOfI.

parseBoundedEnumOfI :: (Bounded a, Enum a) => (a -> Text) -> Text -> Either Text a #

Case insensitive.

Parse values case insensitively based on a precalculated mapping of their Text representations.

>>> parseBoundedEnumOfI toUrlPiece "FALSE" :: Either Text Bool
Right False

For case sensitive parser see parseBoundedEnumOf.

parseBoundedTextData :: (Show a, Bounded a, Enum a) => Text -> Either Text a #

Case insensitive.

Parse values case insensitively based on Show instance.

>>> parseBoundedTextData "true" :: Either Text Bool
Right True
>>> parseBoundedTextData "FALSE" :: Either Text Bool
Right False

This can be used as a default implementation for enumeration types:

>>> data MyData = Foo | Bar | Baz deriving (Show, Bounded, Enum)
>>> instance FromHttpApiData MyData where parseUrlPiece = parseBoundedTextData
>>> parseUrlPiece "foo" :: Either Text MyData
Right Foo

Lenient data

newtype LenientData a #

Lenient parameters. FromHttpApiData combinators always return Right.

Since: 0.3.5

Constructors

LenientData 

Fields

Instances

Instances details
Foldable LenientData # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

fold :: Monoid m => LenientData m -> m

foldMap :: Monoid m => (a -> m) -> LenientData a -> m

foldMap' :: Monoid m => (a -> m) -> LenientData a -> m

foldr :: (a -> b -> b) -> b -> LenientData a -> b

foldr' :: (a -> b -> b) -> b -> LenientData a -> b

foldl :: (b -> a -> b) -> b -> LenientData a -> b

foldl' :: (b -> a -> b) -> b -> LenientData a -> b

foldr1 :: (a -> a -> a) -> LenientData a -> a

foldl1 :: (a -> a -> a) -> LenientData a -> a

toList :: LenientData a -> [a]

null :: LenientData a -> Bool

length :: LenientData a -> Int

elem :: Eq a => a -> LenientData a -> Bool

maximum :: Ord a => LenientData a -> a

minimum :: Ord a => LenientData a -> a

sum :: Num a => LenientData a -> a

product :: Num a => LenientData a -> a

Traversable LenientData # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

traverse :: Applicative f => (a -> f b) -> LenientData a -> f (LenientData b)

sequenceA :: Applicative f => LenientData (f a) -> f (LenientData a)

mapM :: Monad m => (a -> m b) -> LenientData a -> m (LenientData b)

sequence :: Monad m => LenientData (m a) -> m (LenientData a)

Functor LenientData # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

fmap :: (a -> b) -> LenientData a -> LenientData b

(<$) :: a -> LenientData b -> LenientData a

Data a => Data (LenientData a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> LenientData a -> c (LenientData a)

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (LenientData a)

toConstr :: LenientData a -> Constr

dataTypeOf :: LenientData a -> DataType

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (LenientData a))

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (LenientData a))

gmapT :: (forall b. Data b => b -> b) -> LenientData a -> LenientData a

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> LenientData a -> r

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> LenientData a -> r

gmapQ :: (forall d. Data d => d -> u) -> LenientData a -> [u]

gmapQi :: Int -> (forall d. Data d => d -> u) -> LenientData a -> u

gmapM :: Monad m => (forall d. Data d => d -> m d) -> LenientData a -> m (LenientData a)

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> LenientData a -> m (LenientData a)

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> LenientData a -> m (LenientData a)

Read a => Read (LenientData a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

readsPrec :: Int -> ReadS (LenientData a)

readList :: ReadS [LenientData a]

readPrec :: ReadPrec (LenientData a)

readListPrec :: ReadPrec [LenientData a]

Show a => Show (LenientData a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

showsPrec :: Int -> LenientData a -> ShowS

show :: LenientData a -> String

showList :: [LenientData a] -> ShowS

Eq a => Eq (LenientData a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

(==) :: LenientData a -> LenientData a -> Bool

(/=) :: LenientData a -> LenientData a -> Bool

Ord a => Ord (LenientData a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

compare :: LenientData a -> LenientData a -> Ordering

(<) :: LenientData a -> LenientData a -> Bool

(<=) :: LenientData a -> LenientData a -> Bool

(>) :: LenientData a -> LenientData a -> Bool

(>=) :: LenientData a -> LenientData a -> Bool

max :: LenientData a -> LenientData a -> LenientData a

min :: LenientData a -> LenientData a -> LenientData a

FromHttpApiData a => FromHttpApiData (LenientData a) # 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text (LenientData a) #

parseHeader :: ByteString -> Either Text (LenientData a) #

parseQueryParam :: Text -> Either Text (LenientData a) #

Other helpers

showTextData :: Show a => a -> Text #

Lower case.

Convert to URL piece using Show instance. The result is always lower cased.

>>> showTextData True
"true"

This can be used as a default implementation for enumeration types:

>>> data MyData = Foo | Bar | Baz deriving (Show)
>>> instance ToHttpApiData MyData where toUrlPiece = showTextData
>>> toUrlPiece Foo
"foo"

readTextData :: Read a => Text -> Either Text a #

Parse URL piece using Read instance.

Use for types which do not involve letters:

>>> readTextData "1991-06-02" :: Either Text Day
Right 1991-06-02

This parser is case sensitive and will not match showTextData in presence of letters:

>>> readTextData (showTextData True) :: Either Text Bool
Left "could not parse: `true'"

See parseBoundedTextData.