summaryrefslogtreecommitdiff
path: root/hs/src/Text/URI/Decode.hs
blob: 893c22559ad4646c8b07f34d99cb0f6c707315a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
module Text.URI.Decode where

-- Copied verbatim from
-- https://rosettacode.org/wiki/URL_decoding

import qualified Data.Char as Char

urlDecode :: String -> Maybe String
urlDecode [] = Just []
urlDecode ('%':xs) =
  case xs of
    (a:b:xss) ->
      urlDecode xss
      >>= return . ((Char.chr . read $ "0x" ++ [a,b]) :)
    _ -> Nothing
urlDecode ('+':xs) = urlDecode xs >>= return . (' ' :)
urlDecode (x:xs) = urlDecode xs >>= return . (x :)