Applied Functional Programming Course - Move from exercises to a working app!
This is a new course, so there are going to be rough edges. We invite you to
submit issues or pull requests if you find errors or have suggestions on how to
improve it.
This course is designed to be run in a class room with instructors, but we
would like to make it suitable for self-study as well. Although undertaking
this course outside of the workshops will increase the difficulty somewhat,
we do not discourage it and invite suggestions on how to make the course more
approachable.
If you do attempt this on your own and find yourself completely lost,
then you may come find us on IRC on libera.chat
in #qfpl
or #fp-course
.
Applicative f => [f a] -> f [a]
Each level is a self-contained Haskell module, containing incomplete, or as yet
undefined, data types and functions.
We recommend using nix develop
or nix-shell
to get a shell with
the necessary tools. You can also use cabal
or stack
.
If you’re using version >=3.0 of cabal-install
(use cabal
--version
to find out), then you don’t need to previx the commands
with v2-
:
$ cd path/to/applied-fp-course
$ cabal configure --enable-tests
$ cabal build <levelN>-exe
$ $EDITOR src/<LevelN>/README.md
If you would like to use a Nix Shell:
$ cd path/to/applied-fp-course
$ nix-shell # or `nix develop`, if you use flakes
$ cabal build <levelN>-exe
$ $EDITOR src/<LevelN>/README.md
If you have ghcid
installed, run ghcid -c 'cabal repl'
to get a
terminal with up-to-date type errors, which are refreshed on every
save.
A stack.yaml
configuration is provided on a best-effort basis. The
authors do not use stack and cannot promise to be able to resolve
stack-related issues. Though we will do our best. :)
These lessons are designed to be completed with an instructor as part of the
Data61 Applied Functional Programming Course. You are of course welcome to
clone the repository and give it a try, but you may find the tasks more
difficult. If you have any questions we can be contacted in the
#qfpl IRC channel on libera.chat
.
There is a README.md
file in each Level module folder that will provide
instructions about what the goal is for that specific level.
ReaderT
& refactoring— In Development…
— Maybe…
Extension material that doesn’t feel like it belongs to the main progression
lives in the bonus
subdirectory.