| CARVIEW |
servant-elm: Automatically derive Elm functions to query servant webservices.
Modules
[Index] [Quick Jump]
Flags
Automatic Flags
| Name | Description | Default |
|---|---|---|
| examples | Build the example programs. | Disabled |
| integration | Build the integration tests (requires an Elm installation). | Disabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- servant-elm-0.7.3.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
| Versions [RSS] | 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.2.0.0, 0.3.0.0, 0.3.0.1, 0.4.0.0, 0.4.0.1, 0.5.0.0, 0.6.0.0, 0.6.0.1, 0.6.0.2, 0.6.1, 0.7.0, 0.7.1, 0.7.2, 0.7.3 |
|---|---|
| Change log | CHANGELOG.md |
| Dependencies | aeson (>=0.9), base (>=4.7 && <5), directory, elm-bridge (>=0.5.2), lens, servant (>=0.8), servant-elm, servant-foreign (>=0.8), text, wl-pprint-text [details] |
| License | BSD-3-Clause |
| Copyright | 2015-2016 Matt Bray |
| Author | Matt Bray |
| Maintainer | mattjbray@gmail.com |
| Uploaded | by iko at 2023-02-12T06:31:42Z |
| Category | Web |
| Home page | https://github.com/mattjbray/servant-elm#readme |
| Source repo | head: git clone https://github.com/mattjbray/servant-elm |
| Distributions | LTSHaskell:0.7.3, NixOS:0.7.3, Stackage:0.7.3 |
| Reverse Dependencies | 1 direct, 0 indirect [details] |
| Executables | readme-example, giphy-example, e2e-tests-example, books-example |
| Downloads | 9622 total (76 in the last 30 days) |
| Rating | (no votes yet) [estimated by Bayesian average] |
| Your Rating |
|
| Status | Docs available [build log] Last success reported on 2023-02-12 [all 1 reports] |
Readme for servant-elm-0.7.3
[back to package description]Servant Elm
Generate Elm functions to query your Servant API!
Elm type generation coutesy of elm-bridge.
Installation
Servant Elm is available on Hackage.
Example
First, some language pragmas and imports.
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
import Elm.Derive (defaultOptions, deriveBoth)
import Servant.API ((:>), Capture, Get, JSON)
import Servant.Elm (DefineElm (DefineElm), Proxy (Proxy), defElmImports, defElmOptions,
generateElmModuleWith)
We have some Haskell-defined types and our Servant API.
data Book = Book
{ name :: String
}
deriveBoth defaultOptions ''Book
type BooksApi = "books" :> Capture "bookId" Int :> Get '[JSON] Book
Now we can generate Elm functions to query the API:
main :: IO ()
main =
generateElmModuleWith
defElmOptions
[ "Generated"
, "MyApi"
]
defElmImports
"my-elm-dir"
[ DefineElm (Proxy :: Proxy Book)
]
(Proxy :: Proxy BooksApi)
Let's save this as example.hs and run it:
$ stack runghc example.hs
Writing: my-elm-dir/Generated/MyApi.elm
Here's what was generated:
module Generated.MyApi exposing(..)
import Json.Decode
import Json.Encode exposing (Value)
-- The following module comes from bartavelle/json-helpers
import Json.Helpers exposing (..)
import Dict exposing (Dict)
import Set
import Http
import String
import Url.Builder
type alias Book =
{ name: String
}
jsonDecBook : Json.Decode.Decoder ( Book )
jsonDecBook =
Json.Decode.succeed (\pname -> {name = pname})
|> required "name" (Json.Decode.string)
jsonEncBook : Book -> Value
jsonEncBook val =
Json.Encode.object
[ ("name", Json.Encode.string val.name)
]
getBooksByBookId : Int -> Http.Request Book
getBooksByBookId capture_bookId =
let
params =
List.filterMap identity
(List.concat
[])
in
Http.request
{ method =
"GET"
, headers =
[]
, url =
Url.Builder.absolute
[ "books"
, capture_bookId |> String.fromInt
]
params
, body =
Http.emptyBody
, expect =
Http.expectJson <| jsonDecBook
, timeout =
Nothing
, withCredentials =
False
}
See examples for a complete usage example, or take a look at
mattjbray/servant-elm-example-app (elm 0.18) or haskell-servant/example-servant-elm (elm 0.19) for an example project using this library.
Development
$ git clone https://github.com/mattjbray/servant-elm.git
$ cd servant-elm
$ stack test
$ stack test --flag servant-elm:integration
To build all examples:
$ make examples
To run an example:
$ cd examples/e2e-tests
$ elm-reactor
# Open https://localhost:8000/elm/Main.elm