Making dependencies known, demonstrating how to split things apart
This commit is contained in:
parent
75da1a1b4b
commit
25106f9645
1 changed files with 70 additions and 1 deletions
|
@ -8,7 +8,76 @@ type. Can we have a webservice already?
|
||||||
Equipped with some basic knowledge about the way we represent APIs, let's now
|
Equipped with some basic knowledge about the way we represent APIs, let's now
|
||||||
write our first webservice.
|
write our first webservice.
|
||||||
|
|
||||||
The source for this tutorial section is a literate haskell file, so first we
|
## Setting up our project
|
||||||
|
|
||||||
|
So that you don't have to guess too much on the Cabal file, here's a minimal example file. You can run the main function provided in the following examples within the `Server` module without using the separate executable, but these are provided if you wanted to split that out. You can get a layout that is most of the way to what you want with `stack new servant-tutorial new-template`. Here's the Cabal file first:
|
||||||
|
|
||||||
|
```
|
||||||
|
-- servant-tutorial.cabal
|
||||||
|
name: servant-tutorial
|
||||||
|
version: 0.1.0.0
|
||||||
|
synopsis: Initial project template from stack
|
||||||
|
description: Please see README.md
|
||||||
|
license: BSD3
|
||||||
|
license-file: LICENSE
|
||||||
|
author: You!
|
||||||
|
maintainer: allyou@yourplace.com
|
||||||
|
copyright: 2016, Still You!
|
||||||
|
category: Web
|
||||||
|
build-type: Simple
|
||||||
|
cabal-version: >=1.10
|
||||||
|
|
||||||
|
library
|
||||||
|
hs-source-dirs: src
|
||||||
|
exposed-modules: Server
|
||||||
|
build-depends: base >= 4.7 && < 5
|
||||||
|
, base-compat
|
||||||
|
, aeson
|
||||||
|
, attoparsec
|
||||||
|
, blaze-html
|
||||||
|
, blaze-markup
|
||||||
|
, bytestring
|
||||||
|
, directory
|
||||||
|
, http-media
|
||||||
|
, lucid
|
||||||
|
, mtl
|
||||||
|
, servant >= 0.5
|
||||||
|
, servant-server
|
||||||
|
, string-conversions
|
||||||
|
, text
|
||||||
|
, time
|
||||||
|
, wai
|
||||||
|
, warp
|
||||||
|
default-language: Haskell2010
|
||||||
|
|
||||||
|
executable servant-tutorial
|
||||||
|
hs-source-dirs: app
|
||||||
|
main-is: Main.hs
|
||||||
|
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||||
|
build-depends: base
|
||||||
|
, servant-tutorial
|
||||||
|
, warp
|
||||||
|
default-language: Haskell2010
|
||||||
|
```
|
||||||
|
|
||||||
|
Then the `app/Main.hs` file, so you can produce a binary for running locally:
|
||||||
|
|
||||||
|
```haskell
|
||||||
|
-- app/Main.hs
|
||||||
|
module Main where
|
||||||
|
|
||||||
|
import Server (app)
|
||||||
|
import Network.Wai.Handler.Warp (run)
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = run 8081 app
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that this will run whatever app is named `app`. The final result of constructing a Servant server is a WAI app which can be run directly with Warp's runner.
|
||||||
|
|
||||||
|
## Writing our Server
|
||||||
|
|
||||||
|
The source for this tutorial section is a literate haskell file. To start our Server module, we
|
||||||
need to have some language extensions and imports:
|
need to have some language extensions and imports:
|
||||||
|
|
||||||
``` haskell
|
``` haskell
|
||||||
|
|
Loading…
Reference in a new issue