module Network.TinyURL (tinyURL) where

import Network.HTTP
import Network.URI

-- | Use TinyURL to compress a URL.  In the event of a failure, return
-- the original URL.
tinyURL :: String -> IO String
tinyURL url = do
  result <- simpleHTTP request `catch` (const . return $ Left undefined)
  case result of
    Left _ -> return url
    Right response -> return $ rspBody response
  where request = Request { rqURI = uri
                          , rqMethod = GET
                          , rqHeaders = []
                          , rqBody = "" }
        uri = URI { uriScheme = "http:"
                  , uriAuthority = Just $ URIAuth { uriUserInfo = "", uriRegName = "tinyurl.com", uriPort = "" }
                  , uriPath = "/api-create.php"
                  , uriQuery = "?url=" ++ escapeURIString isUnreserved url
                  , uriFragment = "" }