+
+isSafeChar ∷ Char → Bool
+{-# INLINEABLE isSafeChar #-}
+isSafeChar c
+ | c ≡ '/' = True
+ | isReserved c = False
+ | isUnreserved c = True
+ | otherwise = False
+
+mkQueryString ∷ [(T.Text, T.Text)] → String
+{-# INLINEABLE mkQueryString #-}
+mkQueryString = intercalate ";" ∘ map pairToStr
+ where
+ pairToStr ∷ (T.Text, T.Text) → String
+ {-# INLINE pairToStr #-}
+ pairToStr (k, v)
+ = encode k ⧺ ('=':encode v)
+
+ encode ∷ T.Text → String
+ {-# INLINE encode #-}
+ encode = Url.encode ∘ BS.unpack ∘ encodeUtf8