3.5 KiB
What is Haskell?
Haskell is a lazy, functional, statically-typed programming language with advanced type system features such as higher-rank, higher-kinded parametric polymorphism, monadic effects, generalized algebraic data types (GADTs), flexible type classes, associated type families, and more.
Haskell's ghc is a portable, optimizing compiler with a foreign-function interface (FFI), an LLVM backend, and sophisticated runtime support for concurrency, explicit/implicit parallelism, runtime profiling, etc. Other Haskell tools like criterion, quickcheck, hpc, and haddock provide advanced benchmarking, property-based testing, code coverage, and documentation generation.
A large number of production-quality Haskell libraries are available from Hackage. The cabal tool fetches packages and builds projects using the Hackage ecosystem.
%%LOGO%%
Contents
This image ships a minimal Haskell toolchain with the following packages:
ghc7.8.3alex3.1.3cabal-install1.20.0.3happy1.19.4
Usage
-
Start an interactive interpreter session with
ghci:$ docker run -it --rm haskell:7.8 GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done. Prelude>
-
Dockerize a Hackage app with a Dockerfile inheriting from the base image:
FROM haskell:7.8 RUN cabal update && cabal install MazesOfMonad VOLUME /root/.MazesOfMonad ENTRYPOINT ["/root/.cabal/bin/mazesofmonad"]
-
Iteratively develop then ship a Haskell app with a Dockerfile utilizing the build cache:
FROM haskell:7.8
RUN cabal update
Add .cabal file
ADD ./server/snap-example.cabal /opt/server/snap-example.cabal
Docker will cache this command as a layer, freeing us up to
modify source code without re-installing dependencies
RUN cd /opt/server && cabal install --only-dependencies -j4
Add and Install Application Code
ADD ./server /opt/server RUN cd /opt/server && cabal install
Add installed cabal executables to PATH
ENV PATH /root/.cabal/bin:$PATH
Default Command for Container
WORKDIR /opt/server CMD ["snap-example"]
Examples
See the application snippet above in more detail in the example snap application.