packages feed

haste-0.1: src/Haste/Post.hs

{-# OPTIONS_GHC -XScopedTypeVariables #-}

module Haste.Post
  ( post
  , PostParameter (..)
  , PostResponse (..)
  ) where

import Haste.Types
import Haste.Monad (liftIO)

import Network.Curl hiding (URLString)

data PostParameter = String :=> String
data PostResponse = PostResponse { statusLine :: String
                                 , headers :: [(String, String)]
                                 , body :: String
                                 }

post :: URLString -> [PostParameter] -> HM PostResponse
post url params = liftIO $ do
  resp ::  CurlResponse_ [(String, String)] String
    <- curlGetResponse_ url  [CurlHttpPost $ map httpPost params]
  return PostResponse { statusLine = respStatusLine resp
                      , headers = respHeaders resp
                      , body    = respBody resp
                      }

httpPost :: PostParameter -> HttpPost
httpPost (k :=> v) = HttpPost k (Just "text/plain") (ContentString v) [] Nothing