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 ]