Awesome
Haskell/Scotty codebase containing real world examples (CRUD, auth, advanced patterns, etc) that adheres to the RealWorld spec and API.
Demo RealWorld
This codebase was created to demonstrate a fully fledged fullstack application built with Haskell/Scotty including CRUD operations, authentication, routing, pagination, and more.
We've gone to great lengths to adhere to the Haskell/Scotty community styleguides & best practices.
For more information on how to this works with other frontends/backends, head over to the RealWorld repo.
How it works
Environment Variables
Name | Desc | Default Value |
---|---|---|
DATABASE_URL | PostgreSQL Database URL | postgresql://localhost/realworld |
ENABLE_HTTPS | Server will run on HTTPS if True | True |
PORT | Port | 3000 |
JWK_PATH | Path to JWK signature file | secrets/jwk.sig |
JWT_EXPIRATION_SECS | How long until JWT expire (in secs) | 7200 |
Notable Dependencies
classy-prelude
- Better Prelude for Haskellscotty
- Webframeworklibrarypostgresql-simple
- PostgreSQL libraryaeson
- JSON serialization & deserializationdigestive-functors
&digestive-functors-aeson
- Input parsing & validationjose-jwt
- JWT encode & decodeslug
- Slug string builderhspec
- Test framework
Quick Repo Walkthrough
/postgresql
- Database migration scripts./secrets
- Default HTTPS & JWT configuration files for development. Please replace with something else for production./scripts
- Bash scripts to help development./app
- Haskell files for application entry point./test
- Haskell test files./src
- Main Haskell code.
Getting started
Installation
Install Stack.
Install PostgreSQL.
Clone the repository and cd to repo
git clone https://github.com/eckyputrady/haskell-scotty-realworld-example-app.git
cd haskell-scotty-realworld-example-app
Install GHC
stack setup
Install dependencies and build project
stack build
Run project
stack exec realworld-exe
Alternatively, to watch file changes and start the server automatically
./scripts/dev.sh
Alternatively, to watch file changes and run the tests automatically
stack test --file-watch --coverage
To setup deployment to Heroku, please configure this custom buildpack
heroku buildpacks:set https://github.com/mfine/heroku-buildpack-stack
Misc
Logo image - credits to @EricSimmon