Skip to content

rowtype-yoga/purescript-fetch

Repository files navigation

purescript-fetch

High-level library for the WHATWG Fetch Living Standard.

purescript-fetch works on browser and Node.js. Running on Node.js requires version >17.5, see # Usage.

Installation

spago install fetch

Usage

Note: Node.js <17.5 is not supported. Node.js >=17.5 and <18.0 requires the --experimental-fetch node options:

NODE_OPTIONS=--experimental-fetch spago run

Node.js >=18.0 you don't need to set the --experimental-fetch node option.

Perform a simple GET request:

fetch "https://httpbin.org/get" {} >>= _.text

Perform a POST request:

do
    { status, text } <- fetch "https://httpbin.org/post"
        { method: POST
        , body: """{"hello":"world"}"""
        , headers: { "Content-Type": "application/json" }
        }
    responseText <- text

Json parsing

fetch works well with yoga-json and argonaut, use our little helper libraries.

yoga-json

spago install fetch-yoga-json
type HttpBinResponse = { json :: { hello :: String } }

main :: Effect Unit
main = launchAff_ do
  { json } <- fetch "https://httpbin.org/post"
    { method: POST
    , body: writeJSON { hello: "world" }
    , headers: { "Content-Type": "application/json" }
    }
  { json: { hello: world } } :: HttpBinResponse <- fromJSON json
  log world

argonaut

spago install fetch-argonaut
type HttpBinResponse = { json :: { hello :: String } }

do
  { json } <- fetch "https://httpbin.org/post"
    { method: POST
    , body: toJsonString { hello: "world" }
    , headers: { "Content-Type": "application/json" }
    }
  { json: { hello: world } } :: HttpBinResponse <- fromJson json
  log world