16 lines
441 B
Haskell
16 lines
441 B
Haskell
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 :)
|
|
|
|
main :: IO ()
|
|
main = putStrLn . maybe "Bad decode" id $ urlDecode "http%3A%2F%2Ffoo%20bar%2F"
|