Making dependencies known, demonstrating how to split things apart

This commit is contained in:
Chris Allen 2016-03-19 23:23:50 -05:00
parent 75da1a1b4b
commit 25106f9645

View file

@ -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