Halcyon shootout
Halcyon is a system for installing apps and development tools, including and .
These examples are intended to compare build times and sizes across most Haskell web frameworks.
Each example app can be installed in one command on most recent Linux distributions, including CentOS 7, Debian 7, Fedora 20, and Ubuntu 14.04.
Additionally, each example app can be deployed in one click to or .
Results
hello-apiary
Framework: 1.2.3 Server: 3.0.6 Dependencies: and alex 3.1.4 First build time: … Sandbox size: … App size: … Source code:
Main.hs
Toggle
=
runHeroku run def $
action $ bytes "Hello, world!"
main
Extra dependencies
- alex, as a sandbox extra app, with version constraints
Usage
$ PORT=8080 hello-apiary
Installation
$ halcyon install https://github.com/mietek/hello-apiary
-----> Cloning https://github.com/mietek/hello-apiary... done, 4db6a68
-----> Installing hello-apiary-1.0
-----> Determining constraints
Label: **hello-apiary-1.0**
Prefix: **/app**
Source hash: **2c8b323**
Constraints hash: **34cee3a**
Magic hash: **9ab52f3**
External storage: **public**
GHC version: **7.8.4**
Cabal version: **1.20.0.3**
Cabal repository: **Hackage**
Sandbox magic hash: **1dd8630**
Sandbox extra apps: **alex-3.1.4**
-----> Restoring GHC directory
Extracting halcyon-ghc-7.8.4.tar.gz... done, 701MB
-----> Restoring Cabal directory
Extracting halcyon-cabal-1.20.0.3-hackage-2015-01-23.tar.gz... done, 182MB
-----> Building sandbox directory
-----> Creating sandbox
-----> Installing sandbox extra apps
-----> Unpacking app
-----> Installing alex-3.1.4
Label: **alex-3.1.4**
Prefix: **/app/sandbox**
Source hash: **ba3f51d**
External storage: **public**
GHC version: **7.8.4**
-----> Restoring install directory
Extracting halcyon-install-ba3f51d-alex-3.1.4.tar.gz... done, 2.5MB
-----> Installing app to /app/sandbox
-----> Installed alex-3.1.4
-----> Building sandbox
Resolving dependencies...
Notice: installing into a sandbox located at /app/sandbox
...
Installed warp-3.0.6
Installed apiary-1.2.3
-----> Sandbox built, 76MB
Removing documentation from sandbox directory... done, 75MB
Stripping sandbox directory... done, 65MB
-----> Archiving sandbox directory
Creating halcyon-sandbox-34cee3a.1dd8630-hello-apiary-1.0.tar.gz... done, 11MB
-----> Configuring app
-----> Building app
Building hello-apiary-1.0...
Preprocessing executable 'hello-apiary' for hello-apiary-1.0...
...
Linking dist/build/hello-apiary/hello-apiary ...
-----> App built, 9.6MB
Stripping app... done, 7.3MB
-----> Archiving build directory
Creating halcyon-build-hello-apiary-1.0.tar.gz... done, 1.6MB
-----> Preparing install directory
-----> Installing extra data files for dependencies
-----> Install directory prepared, 7.0MB
-----> Archiving install directory
Creating halcyon-install-2c8b323-hello-apiary-1.0.tar.gz... done, 1.6MB
-----> Installing app to /app
-----> Installed hello-apiary-1.0
-----> App installed: **hello-apiary-1.0**
hello-happstack
Framework: 7.3.6 Server: 7.4.0 Dependencies: First build time: … Sandbox size: … App size: … Source code:
Main.hs
Toggle
= do
env <- getEnvironment
let port_ = maybe 8080 read $ lookup "PORT" env
config = defaultServerConfig { port = port_ }
serve (Just config) $
ok $ toResponse "Hello, world!"
main
Usage
$ PORT=8080 hello-happstack
Installation
-----> Cloning https://github.com/mietek/hello-happstack... done, 464deac
-----> Installing hello-happstack-1.0
-----> Determining constraints
Label: **hello-happstack-1.0**
Prefix: **/app**
Source hash: **a3e96f1**
Constraints hash: **3b0b768**
Magic hash: **52d0f07**
External storage: **public**
GHC version: **7.8.4**
Cabal version: **1.20.0.3**
Cabal repository: **Hackage**
-----> Restoring GHC directory
Extracting halcyon-ghc-7.8.4.tar.gz... done, 701MB
-----> Restoring Cabal directory
Extracting halcyon-cabal-1.20.0.3-hackage-2015-01-23.tar.gz... done, 182MB
-----> Building sandbox directory
-----> Creating sandbox
-----> Building sandbox
Resolving dependencies...
Notice: installing into a sandbox located at /app/sandbox
...
Installed happstack-server-7.4.0
Installed happstack-lite-7.3.6
-----> Sandbox built, 65MB
Removing documentation from sandbox directory... done, 64MB
Stripping sandbox directory... done, 55MB
-----> Archiving sandbox directory
Creating halcyon-sandbox-3b0b768-hello-happstack-1.0.tar.gz... done, 8.8MB
-----> Configuring app
-----> Building app
Building hello-happstack-1.0...
Preprocessing executable 'hello-happstack' for hello-happstack-1.0...
...
Linking dist/build/hello-happstack/hello-happstack ...
-----> App built, 12MB
Stripping app... done, 8.7MB
-----> Archiving build directory
Creating halcyon-build-hello-happstack-1.0.tar.gz... done, 1.8MB
-----> Preparing install directory
-----> Install directory prepared, 8.4MB
-----> Archiving install directory
Creating halcyon-install-a3e96f1-hello-happstack-1.0.tar.gz... done, 1.7MB
-----> Installing app to /app
-----> Installed hello-happstack-1.0
-----> App installed: **hello-happstack-1.0**
hello-mflow
Framework: 0.4.5.9 Server: 3.0.6 Dependencies: and cpphs 1.18.8 First build time: … Sandbox size: … App size: … Source code:
Main.hs
Toggle
=
runNavigation "hello" $ transientNav $
page $ "Hello, world!" ++> empty
main
Extra dependencies
- cpphs, as a sandbox extra app, with version constraints
Usage
$ PORT=8080 hello-mflow
Installation
$ halcyon install https://github.com/mietek/hello-mflow
-----> Cloning https://github.com/mietek/hello-mflow... done, d79dba3
-----> Installing hello-mflow-1.0
-----> Determining constraints
Label: **hello-mflow-1.0**
Prefix: **/app**
Source hash: **931df8b**
Constraints hash: **d031451**
Magic hash: **e710ffa**
External storage: **public**
GHC version: **7.8.4**
Cabal version: **1.20.0.3**
Cabal repository: **Hackage**
Sandbox magic hash: **5ff190e**
Sandbox extra apps: **cpphs-1.18.8**
-----> Restoring GHC directory
Extracting halcyon-ghc-7.8.4.tar.gz... done, 701MB
-----> Restoring Cabal directory
Extracting halcyon-cabal-1.20.0.3-hackage-2015-01-23.tar.gz... done, 182MB
-----> Building sandbox directory
-----> Creating sandbox
-----> Installing sandbox extra apps
-----> Unpacking app
-----> Installing cpphs-1.18.8
Label: **cpphs-1.18.8**
Prefix: **/app/sandbox**
Source hash: **15d7c8e**
External storage: **public**
GHC version: **7.8.4**
-----> Restoring install directory
Extracting halcyon-install-15d7c8e-cpphs-1.18.8.tar.gz... done, 3.3MB
-----> Installing app to /app/sandbox
-----> Installed cpphs-1.18.8
-----> Building sandbox
Resolving dependencies...
Notice: installing into a sandbox located at /app/sandbox
...
Installed warp-3.0.6
Installed MFlow-0.4.5.9
-----> Sandbox built, 155MB
Removing documentation from sandbox directory... done, 154MB
Stripping sandbox directory... done, 133MB
-----> Archiving sandbox directory
Creating halcyon-sandbox-d031451.5ff190e-hello-mflow-1.0.tar.gz... done, 23MB
-----> Configuring app
-----> Building app
Building hello-mflow-1.0...
Preprocessing executable 'hello-mflow' for hello-mflow-1.0...
...
Linking dist/build/hello-mflow/hello-mflow ...
-----> App built, 21MB
Stripping app... done, 15MB
-----> Archiving build directory
Creating halcyon-build-hello-mflow-1.0.tar.gz... done, 3.4MB
-----> Preparing install directory
-----> Installing extra data files for dependencies
-----> Install directory prepared, 15MB
-----> Archiving install directory
Creating halcyon-install-931df8b-hello-mflow-1.0.tar.gz... done, 3.3MB
-----> Installing app to /app
-----> Installed hello-mflow-1.0
-----> App installed: **hello-mflow-1.0**
hello-miku
Framework: 2014.11.17 Server: 0.9.4.6 Dependencies: First build time: … Sandbox size: … App size: … Source code:
Main.hs
Toggle
= do
env <- getEnvironment
let port_ = maybe 8080 read $ lookup "PORT" env
runWithConfig (ServerConfig port_) . miku $
get "/" (text "Hello, world!")
main
Usage
$ PORT=8080 hello-miku
Installation
$ halcyon install https://github.com/mietek/hello-miku
-----> Cloning https://github.com/mietek/hello-miku... done, 0ca7468
-----> Installing hello-miku-1.0
-----> Determining constraints
Label: **hello-miku-1.0**
Prefix: **/app**
Source hash: **d2ce38b**
Constraints hash: **1d84a99**
Magic hash: **d849f1f**
External storage: **public**
GHC version: **7.8.4**
Cabal version: **1.20.0.3**
Cabal repository: **Hackage**
-----> Restoring GHC directory
Extracting halcyon-ghc-7.8.4.tar.gz... done, 701MB
-----> Restoring Cabal directory
Extracting halcyon-cabal-1.20.0.3-hackage-2015-01-23.tar.gz... done, 182MB
-----> Building sandbox directory
-----> Creating sandbox
-----> Building sandbox
Resolving dependencies...
Notice: installing into a sandbox located at /app/sandbox
...
Installed miku-2014.11.17
Installed snap-server-0.9.4.6
-----> Sandbox built, 85MB
Removing documentation from sandbox directory... done, 84MB
Stripping sandbox directory... done, 73MB
-----> Archiving sandbox directory
Creating halcyon-sandbox-1d84a99-hello-miku-1.0.tar.gz... done, 13MB
-----> Configuring app
-----> Building app
Building hello-miku-1.0...
Preprocessing executable 'hello-miku' for hello-miku-1.0...
...
Linking dist/build/hello-miku/hello-miku ...
-----> App built, 13MB
Stripping app... done, 11MB
-----> Archiving build directory
Creating halcyon-build-hello-miku-1.0.tar.gz... done, 2.2MB
-----> Preparing install directory
-----> Installing extra data files for dependencies
-----> Install directory prepared, 11MB
-----> Archiving install directory
Creating halcyon-install-d2ce38b-hello-miku-1.0.tar.gz... done, 2.1MB
-----> Installing app to /app
-----> Installed hello-miku-1.0
-----> App installed: **hello-miku-1.0**
hello-scotty
Framework: 0.9.1 Server: 3.0.6 Dependencies: First build time: … Sandbox size: … App size: … Source code:
Main.hs
Toggle
= do
env <- getEnvironment
let port = maybe 8080 read $ lookup "PORT" env
scotty port $
get "/" $ text "Hello, world!"
main
Usage
$ PORT=8080 hello-scotty
Installation
-----> Cloning https://github.com/mietek/hello-scotty... done, d858114
-----> Installing hello-scotty-1.0
-----> Determining constraints
Label: **hello-scotty-1.0**
Prefix: **/app**
Source hash: **96454ee**
Constraints hash: **110abd2**
Magic hash: **69d5fd3**
External storage: **public**
GHC version: **7.8.4**
Cabal version: **1.20.0.3**
Cabal repository: **Hackage**
-----> Restoring GHC directory
Extracting halcyon-ghc-7.8.4.tar.gz... done, 701MB
-----> Restoring Cabal directory
Extracting halcyon-cabal-1.20.0.3-hackage-2015-01-23.tar.gz... done, 182MB
-----> Building sandbox directory
-----> Creating sandbox
-----> Building sandbox
Resolving dependencies...
Notice: installing into a sandbox located at /app/sandbox
...
Installed warp-3.0.6
Installed scotty-0.9.1
-----> Sandbox built, 84MB
Removing documentation from sandbox directory... done, 84MB
Stripping sandbox directory... done, 73MB
-----> Archiving sandbox directory
Creating halcyon-sandbox-110abd2-hello-scotty-1.0.tar.gz... done, 12MB
-----> Configuring app
-----> Building app
Building hello-scotty-1.0...
Preprocessing executable 'hello-scotty' for hello-scotty-1.0...
...
Linking dist/build/hello-scotty/hello-scotty ...
-----> App built, 12MB
Stripping app... done, 9.4MB
-----> Archiving build directory
Creating halcyon-build-hello-scotty-1.0.tar.gz... done, 2.1MB
-----> Preparing install directory
-----> Install directory prepared, 9.0MB
-----> Archiving install directory
Creating halcyon-install-96454ee-hello-scotty-1.0.tar.gz... done, 2.0MB
-----> Installing app to /app
-----> Installed hello-scotty-1.0
-----> App installed: **hello-scotty-1.0**
hello-servant
Framework: 0.2.1 Server: 3.0.6 Dependencies: First build time: … Sandbox size: … App size: … Source code:
Main.hs
Toggle
type Hello = Get Text
server = return "Hello, world!"
proxy = Proxy
main = do
env <- getEnvironment
let port = maybe 8080 read $ lookup "PORT" env
run port $ serve proxy server
Usage
$ PORT=8080 hello-servant
Installation
$ halcyon install https://github.com/mietek/hello-servant
-----> Cloning https://github.com/mietek/hello-servant... done, 6bec98b
-----> Installing hello-servant-1.0
-----> Determining constraints
Label: **hello-servant-1.0**
Prefix: **/app**
Source hash: **78f958d**
Constraints hash: **f458aa8**
Magic hash: **3bffeae**
External storage: **public**
GHC version: **7.8.4**
Cabal version: **1.20.0.3**
Cabal repository: **Hackage**
-----> Restoring GHC directory
Extracting halcyon-ghc-7.8.4.tar.gz... done, 701MB
-----> Restoring Cabal directory
Extracting halcyon-cabal-1.20.0.3-hackage-2015-01-23.tar.gz... done, 182MB
-----> Building sandbox directory
-----> Creating sandbox
-----> Building sandbox
Resolving dependencies...
Notice: installing into a sandbox located at /app/sandbox
...
Installed servant-0.2.1
Installed warp-3.0.6
-----> Sandbox built, 160MB
Removing documentation from sandbox directory... done, 159MB
Stripping sandbox directory... done, 140MB
-----> Archiving sandbox directory
Creating halcyon-sandbox-f458aa8-hello-servant-1.0.tar.gz... done, 24MB
-----> Configuring app
-----> Building app
Building hello-servant-1.0...
Preprocessing executable 'hello-servant' for hello-servant-1.0...
...
Linking dist/build/hello-servant/hello-servant ...
-----> App built, 11MB
Stripping app... done, 8.6MB
-----> Archiving build directory
Creating halcyon-build-hello-servant-1.0.tar.gz... done, 1.9MB
-----> Preparing install directory
-----> Installing extra data files for dependencies
-----> Install directory prepared, 8.1MB
-----> Archiving install directory
Creating halcyon-install-78f958d-hello-servant-1.0.tar.gz... done, 1.8MB
-----> Installing app to /app
-----> Installed hello-servant-1.0
-----> App installed: **hello-servant-1.0**
hello-simple
Framework: 0.10.1 Server: 3.0.6 Dependencies: First build time: … Sandbox size: … App size: … Source code:
Main.hs
Toggle
= do
runner $ controllerApp () $ do
routeTop $ respond $
ok "text/plain" "Hello, world!"
main = do
env <- getEnvironment
let port = maybe 8080 read $ lookup "PORT" env
app (run port)
app runner
Usage
$ PORT=8080 hello-simple
Installation
$ halcyon install https://github.com/mietek/hello-simple
-----> Cloning https://github.com/mietek/hello-simple... done, 13e6b52
-----> Installing hello-simple-1.0
-----> Determining constraints
Label: **hello-simple-1.0**
Prefix: **/app**
Source hash: **4ad50e1**
Constraints hash: **4db1fca**
Magic hash: **7624c31**
External storage: **public**
GHC version: **7.8.4**
Cabal version: **1.20.0.3**
Cabal repository: **Hackage**
-----> Restoring GHC directory
Extracting halcyon-ghc-7.8.4.tar.gz... done, 701MB
-----> Restoring Cabal directory
Extracting halcyon-cabal-1.20.0.3-hackage-2015-01-23.tar.gz... done, 182MB
-----> Building sandbox directory
-----> Creating sandbox
-----> Building sandbox
Resolving dependencies...
Notice: installing into a sandbox located at /app/sandbox
...
Installed warp-3.0.6
Installed simple-0.10.1
-----> Sandbox built, 102MB
Removing documentation from sandbox directory... done, 102MB
Stripping sandbox directory... done, 89MB
-----> Archiving sandbox directory
Creating halcyon-sandbox-4db1fca-hello-simple-1.0.tar.gz... done, 16MB
-----> Configuring app
-----> Building app
Building hello-simple-1.0...
Preprocessing executable 'hello-simple' for hello-simple-1.0...
...
Linking dist/build/hello-simple/hello-simple ...
-----> App built, 6.6MB
Stripping app... done, 5.3MB
-----> Archiving build directory
Creating halcyon-build-hello-simple-1.0.tar.gz... done, 1.2MB
-----> Preparing install directory
-----> Installing extra data files for dependencies
-----> Install directory prepared, 4.9MB
-----> Archiving install directory
Creating halcyon-install-4ad50e1-hello-simple-1.0.tar.gz... done, 1.1MB
-----> Installing app to /app
-----> Installed hello-simple-1.0
-----> App installed: **hello-simple-1.0**
hello-snap
Framework: 0.9.6.4 Server: 0.9.4.6 Dependencies: First build time: … Sandbox size: … App size: … Source code:
Main.hs
Toggle
= do
env <- getEnvironment
let port = maybe 8080 read $ lookup "PORT" env
config = setPort port
. setAccessLog ConfigNoLog
. setErrorLog ConfigNoLog
$ defaultConfig
httpServe config $
ifTop $ writeBS "Hello, world!"
main
Usage
$ PORT=8080 hello-snap
Installation
$ halcyon install https://github.com/mietek/hello-snap
-----> Cloning https://github.com/mietek/hello-snap... done, b47331a
-----> Installing hello-snap-1.0
-----> Determining constraints
Label: **hello-snap-1.0**
Prefix: **/app**
Source hash: **4cc052a**
Constraints hash: **335d31e**
Magic hash: **c12b874**
External storage: **public**
GHC version: **7.8.4**
Cabal version: **1.20.0.3**
Cabal repository: **Hackage**
-----> Restoring GHC directory
Extracting halcyon-ghc-7.8.4.tar.gz... done, 701MB
-----> Restoring Cabal directory
Extracting halcyon-cabal-1.20.0.3-hackage-2015-01-23.tar.gz... done, 182MB
-----> Building sandbox directory
-----> Creating sandbox
-----> Building sandbox
Resolving dependencies...
Notice: installing into a sandbox located at /app/sandbox
...
Installed snap-core-0.9.6.4
Installed snap-server-0.9.4.6
-----> Sandbox built, 75MB
Removing documentation from sandbox directory... done, 75MB
Stripping sandbox directory... done, 65MB
-----> Archiving sandbox directory
Creating halcyon-sandbox-335d31e-hello-snap-1.0.tar.gz... done, 11MB
-----> Configuring app
-----> Building app
Building hello-snap-1.0...
Preprocessing executable 'hello-snap' for hello-snap-1.0...
...
Linking dist/build/hello-snap/hello-snap ...
-----> App built, 12MB
Stripping app... done, 9.4MB
-----> Archiving build directory
Creating halcyon-build-hello-snap-1.0.tar.gz... done, 1.9MB
-----> Preparing install directory
-----> Installing extra data files for dependencies
-----> Install directory prepared, 9.2MB
-----> Archiving install directory
Creating halcyon-install-4cc052a-hello-snap-1.0.tar.gz... done, 1.9MB
-----> Installing app to /app
-----> Installed hello-snap-1.0
-----> App installed: **hello-snap-1.0**
hello-spock
Framework: 0.7.7.0 Server: 3.0.6 Dependencies: First build time: … Sandbox size: … App size: … Source code:
Main.hs
Toggle
= do
env <- getEnvironment
let port = maybe 8080 read $ lookup "PORT" env
runSpock port $ spockT id $
get "/" $ text "Hello, world!"
main
Usage
$ PORT=8080 hello-spock
Installation
$ halcyon install https://github.com/mietek/hello-spock
-----> Cloning https://github.com/mietek/hello-spock... done, 73550da
-----> Installing hello-spock-1.0
-----> Determining constraints
Label: **hello-spock-1.0**
Prefix: **/app**
Source hash: **f616025**
Constraints hash: **b94066d**
Magic hash: **ade4ef3**
External storage: **public**
GHC version: **7.8.4**
Cabal version: **1.20.0.3**
Cabal repository: **Hackage**
-----> Restoring GHC directory
Extracting halcyon-ghc-7.8.4.tar.gz... done, 701MB
-----> Restoring Cabal directory
Extracting halcyon-cabal-1.20.0.3-hackage-2015-01-23.tar.gz... done, 182MB
-----> Building sandbox directory
-----> Creating sandbox
-----> Building sandbox
Resolving dependencies...
Notice: installing into a sandbox located at /app/sandbox
...
Installed warp-3.0.6
Installed Spock-0.7.7.0
-----> Sandbox built, 94MB
Removing documentation from sandbox directory... done, 93MB
Stripping sandbox directory... done, 80MB
-----> Archiving sandbox directory
Creating halcyon-sandbox-b94066d-hello-spock-1.0.tar.gz... done, 14MB
-----> Configuring app
-----> Building app
Building hello-spock-1.0...
Preprocessing executable 'hello-spock' for hello-spock-1.0...
...
Linking dist/build/hello-spock/hello-spock ...
-----> App built, 12MB
Stripping app... done, 9.4MB
-----> Archiving build directory
Creating halcyon-build-hello-spock-1.0.tar.gz... done, 2.1MB
-----> Preparing install directory
-----> Install directory prepared, 8.9MB
-----> Archiving install directory
Creating halcyon-install-f616025-hello-spock-1.0.tar.gz... done, 2.0MB
-----> Installing app to /app
-----> Installed hello-spock-1.0
-----> App installed: **hello-spock-1.0**
hello-wai
Framework: 3.0.2.2 Server: 3.0.6 Dependencies: First build time: … Sandbox size: … App size: … Source code:
Main.hs
Toggle
=
respond $
responseLBS status200
[("Content-Type", "text/plain")]
"Hello, world!"
main = do
env <- getEnvironment
let port = maybe 8080 read $ lookup "PORT" env
run port app
app _ respond
Usage
$ PORT=8080 hello-wai
Installation
$ halcyon install https://github.com/mietek/hello-wai
-----> Cloning https://github.com/mietek/hello-wai... done, c08c907
-----> Installing hello-wai-1.0
-----> Determining constraints
Label: **hello-wai-1.0**
Prefix: **/app**
Source hash: **d7c23a9**
Constraints hash: **ffec23f**
Magic hash: **815d4c4**
External storage: **public**
GHC version: **7.8.4**
Cabal version: **1.20.0.3**
Cabal repository: **Hackage**
-----> Restoring GHC directory
Extracting halcyon-ghc-7.8.4.tar.gz... done, 701MB
-----> Restoring Cabal directory
Extracting halcyon-cabal-1.20.0.3-hackage-2015-01-23.tar.gz... done, 182MB
-----> Building sandbox directory
-----> Creating sandbox
-----> Building sandbox
Resolving dependencies...
Notice: installing into a sandbox located at /app/sandbox
...
Installed wai-3.0.2.2
Installed warp-3.0.6
-----> Sandbox built, 47MB
Removing documentation from sandbox directory... done, 46MB
Stripping sandbox directory... done, 40MB
-----> Archiving sandbox directory
Creating halcyon-sandbox-ffec23f-hello-wai-1.0.tar.gz... done, 6.7MB
-----> Configuring app
-----> Building app
Building hello-wai-1.0...
Preprocessing executable 'hello-wai' for hello-wai-1.0...
...
Linking dist/build/hello-wai/hello-wai ...
-----> App built, 6.2MB
Stripping app... done, 5.0MB
-----> Archiving build directory
Creating halcyon-build-hello-wai-1.0.tar.gz... done, 1.2MB
-----> Preparing install directory
-----> Install directory prepared, 4.7MB
-----> Archiving install directory
Creating halcyon-install-d7c23a9-hello-wai-1.0.tar.gz... done, 1.1MB
-----> Installing app to /app
-----> Installed hello-wai-1.0
-----> App installed: **hello-wai-1.0**
hello-wheb
Framework: 0.3.1.0 Server: 3.0.6 Dependencies: First build time: … Sandbox size: … App size: … Source code:
Main.hs
Toggle
= do
env <- getEnvironment
let port = maybe (8080 :: Int) read
$ lookup "PORT" env
opts <- genMinOpts $ do
addGET "." rootPat $ (text "Hello, world!")
addSetting' "port" port
runWhebServer opts
main
Usage
$ PORT=8080 hello-wheb
Installation
$ halcyon install https://github.com/mietek/hello-wheb
-----> Cloning https://github.com/mietek/hello-wheb... done, 24f9824
-----> Installing hello-wheb-1.0
-----> Determining constraints
Label: **hello-wheb-1.0**
Prefix: **/app**
Source hash: **b572bc1**
Constraints hash: **c8cc6cc**
Magic hash: **0c8a416**
External storage: **public**
GHC version: **7.8.4**
Cabal version: **1.20.0.3**
Cabal repository: **Hackage**
-----> Restoring GHC directory
Extracting halcyon-ghc-7.8.4.tar.gz... done, 701MB
-----> Restoring Cabal directory
Extracting halcyon-cabal-1.20.0.3-hackage-2015-01-23.tar.gz... done, 182MB
-----> Building sandbox directory
-----> Creating sandbox
-----> Building sandbox
Resolving dependencies...
Notice: installing into a sandbox located at /app/sandbox
...
Installed warp-3.0.6
Installed Wheb-0.3.1.0
-----> Sandbox built, 148MB
Removing documentation from sandbox directory... done, 147MB
Stripping sandbox directory... done, 129MB
-----> Archiving sandbox directory
Creating halcyon-sandbox-c8cc6cc-hello-wheb-1.0.tar.gz... done, 23MB
-----> Configuring app
-----> Building app
Building hello-wheb-1.0...
Preprocessing executable 'hello-wheb' for hello-wheb-1.0...
...
Linking dist/build/hello-wheb/hello-wheb ...
-----> App built, 11MB
Stripping app... done, 7.6MB
-----> Archiving build directory
Creating halcyon-build-hello-wheb-1.0.tar.gz... done, 1.7MB
-----> Preparing install directory
-----> Installing extra data files for dependencies
-----> Install directory prepared, 7.1MB
-----> Archiving install directory
Creating halcyon-install-b572bc1-hello-wheb-1.0.tar.gz... done, 1.7MB
-----> Installing app to /app
-----> Installed hello-wheb-1.0
-----> App installed: **hello-wheb-1.0**
hello-yesod
Framework: 1.4.1.4 Server: 3.0.6 Dependencies: First build time: … Sandbox size: … App size: … Source code:
Main.hs
Toggle
data Hello = Hello
mkYesod "Hello" [parseRoutes|/ HomeR GET|]
getHomeR = return "Hello, world!"
main = do
env <- getEnvironment
let port = maybe 8080 read $ lookup "PORT" env
warp port Hello
Usage
$ PORT=8080 hello-yesod
Installation
$ halcyon install https://github.com/mietek/hello-yesod
-----> Cloning https://github.com/mietek/hello-yesod... done, a91e42d
-----> Installing hello-yesod-1.0
-----> Determining constraints
Label: **hello-yesod-1.0**
Prefix: **/app**
Source hash: **d47f851**
Constraints hash: **1a1d740**
Magic hash: **de9e85b**
External storage: **public**
GHC version: **7.8.4**
Cabal version: **1.20.0.3**
Cabal repository: **Hackage**
-----> Restoring GHC directory
Extracting halcyon-ghc-7.8.4.tar.gz... done, 701MB
-----> Restoring Cabal directory
Extracting halcyon-cabal-1.20.0.3-hackage-2015-01-23.tar.gz... done, 182MB
-----> Building sandbox directory
-----> Creating sandbox
-----> Building sandbox
Resolving dependencies...
Notice: installing into a sandbox located at /app/sandbox
...
Installed warp-3.0.6
Installed yesod-1.4.1.4
-----> Sandbox built, 255MB
Removing documentation from sandbox directory... done, 254MB
Stripping sandbox directory... done, 220MB
-----> Archiving sandbox directory
Creating halcyon-sandbox-1a1d740-hello-yesod-1.0.tar.gz... done, 39MB
-----> Configuring app
-----> Building app
Building hello-yesod-1.0...
Preprocessing executable 'hello-yesod' for hello-yesod-1.0...
...
Loading package warp-3.0.6 ... linking ... done.
Loading package yesod-1.4.1.4 ... linking ... done.
Main.hs:10:1: Warning:
Defined but not used: type constructor or class ‘Widget’
Main.hs:10:1: Warning: Defined but not used: ‘resourcesHello’
Linking dist/build/hello-yesod/hello-yesod ...
-----> App built, 25MB
Stripping app... done, 20MB
-----> Archiving build directory
Creating halcyon-build-hello-yesod-1.0.tar.gz... done, 3.9MB
-----> Preparing install directory
-----> Installing extra data files for dependencies
-----> Install directory prepared, 19MB
-----> Archiving install directory
Creating halcyon-install-d47f851-hello-yesod-1.0.tar.gz... done, 3.8MB
-----> Installing app to /app
-----> Installed hello-yesod-1.0
-----> App installed: **hello-yesod-1.0**
Comments
The test simulates installing each example for the first time, by forcing Halcyon to rebuild the sandbox and the app from scratch. GHC and Cabal are restored from local cache.
The times given are mean [low, high], calculated across 10 test runs. Each test run consists of building all example apps on an 8 GB DigitalOcean droplet, running Ubuntu 14.04.
The raw results are available as a . To reproduce the results, use the :
The output of the test script includes: