web-inv-route-0.1: Web/Route/Invertible/Query.hs
module Web.Route.Invertible.Query
( QueryString
, QueryParams
, simpleQueryParams
, paramsQuerySimple
) where
import Control.Arrow (second)
import qualified Data.ByteString as BS
import qualified Data.HashMap.Lazy as HM
import Network.HTTP.Types.URI (SimpleQuery)
-- |The type of URL query strings, variables, and parameters, after URI decoding but before UTF-8 decoding.
type QueryString = BS.ByteString
-- |A map from query variables to values, based on 'SimpleQuery'.
type QueryParams = HM.HashMap QueryString [QueryString]
simpleQueryParams :: SimpleQuery -> QueryParams
simpleQueryParams = HM.fromListWith (++) . map (second return)
paramsQuerySimple :: QueryParams -> SimpleQuery
paramsQuerySimple q = [ (n, v) | (n, vl) <- HM.toList q, v <- vl ]