All Projects → qfpl → Applied Fp Course

qfpl / Applied Fp Course

Licence: other
Applied Functional Programming Course - Move from exercises to a working app!

Programming Languages

haskell
3896 projects

Labels

Projects that are alternatives of or similar to Applied Fp Course

TamoStudy
TamoStudy is a productivity work and study timer that implements a fun, virtual pet to help you stay driven to focus.
Stars: ✭ 35 (-93.52%)
Mutual labels:  study
Weixinresource
微信开发资源汇总 | WeChat Development Resources Summary
Stars: ✭ 279 (-48.33%)
Mutual labels:  study
Cissp Study Guide
study material used for the 2018 CISSP exam
Stars: ✭ 411 (-23.89%)
Mutual labels:  study
cramkle
Web-based flashcard studying app
Stars: ✭ 26 (-95.19%)
Mutual labels:  study
Ultimate Python
Ultimate Python study guide for newcomers and professionals alike. 🐍 🐍 🐍
Stars: ✭ 3,309 (+512.78%)
Mutual labels:  study
Free Courses
A collection of free courses about programming 📖
Stars: ✭ 281 (-47.96%)
Mutual labels:  study
lectures
Computer Vision & Deep Learning course materials
Stars: ✭ 27 (-95%)
Mutual labels:  study
Codebuddies
CodeBuddies.org: Community-organized hangouts for learning programming together - community-built using MeteorJS
Stars: ✭ 481 (-10.93%)
Mutual labels:  study
Haskell Study Startup
Launch your own Haskell study group. Now.
Stars: ✭ 269 (-50.19%)
Mutual labels:  study
Oscp Pwk
This is my cheatsheet and scripts developed while taking the Offensive Security Penetration Testing with Kali Linux course.
Stars: ✭ 406 (-24.81%)
Mutual labels:  study
gostudy
Go study session presentation at CyberAgent
Stars: ✭ 25 (-95.37%)
Mutual labels:  study
rust-course
<<Rust语言圣经(Book & Course)>>对Rust语言进行全面且深入的讲解,书中辅以生动的示例和习题,带你攻克从入门学习到实践应用的各种难关。 我们的目标是做一门优秀的开源Rust教程(课程)——学Rust就上course.rs。
Stars: ✭ 2,739 (+407.22%)
Mutual labels:  study
Fe Advance
前端进阶十日谈
Stars: ✭ 296 (-45.19%)
Mutual labels:  study
Eloquent
Eloquent is a bible study tool for macOS
Stars: ✭ 88 (-83.7%)
Mutual labels:  study
Vim Practice
💘 Vim is awesome! Here is my practice and study log.
Stars: ✭ 452 (-16.3%)
Mutual labels:  study
StudyAtHome
おうちで時間割
Stars: ✭ 30 (-94.44%)
Mutual labels:  study
Starway To Orione
The Orione Team Learning Path
Stars: ✭ 280 (-48.15%)
Mutual labels:  study
Swoole study
一份Swoole入门教程,根据作者的个人理解编写,常见的Swoole入门知识和讲解。
Stars: ✭ 509 (-5.74%)
Mutual labels:  study
Uexam
学之思在线考试系统,支持多种题型:选择题、多选题、判断题、填空题、解答题以及数学公式,包含PC端、小程序端,扩展性强,部署方便、界面设计友好、代码结构清晰
Stars: ✭ 473 (-12.41%)
Mutual labels:  study
Eth Cs Notes
Lecture notes and cheatsheets for Master's in Computer Science at ETH Zurich
Stars: ✭ 388 (-28.15%)
Mutual labels:  study

Applied Functional Programming Course

Build Status

CSIRO's Data61 Logo

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 Freenode in #qfpl or #fp-course.

You:

  • Have completed, or are capable of completing, the Data61 FP Course.
  • Have a few months self-study to your name.
  • Want to know how to build larger applications with statically typed FP.
  • Are willing to accept that a web application is a sufficient choice.
  • Can write the canonical function of type: Applicative f => [f a] -> f [a]

We:

  • Have constructed a sequence of goals of increasing difficulty.
  • Have provided a framework within which to apply these goals.
  • Have included relevant components of larger applications:
    • Package dependencies
    • Project configuration
    • Application testing & building
    • Encoding / Decoding messages (JSON & Binary)
    • Persistent storage integration
    • App state & configuration management
    • Error handling & reporting
  • Will utilise both type & test driven development techniques.
  • Will explain architectural and design trade-offs when appropriate.

Setup build tools:

Each level is a self-contained Haskell module, containing incomplete, or as yet undefined, data types and functions.

We recommend using a nix-shell, but it is not required.

Cabal

If you're using a version of Cabal that is >=2.0 (use cabal --version to find out), then you can use the new-* commands and you don't need a sandbox:

$ cd path/to/applied-fp-course
$ cabal new-configure --enable-tests
$ cabal new-build <levelN>-exe
$ $EDITOR src/<LevelN>/README.md

If you don't have a version of Cabal that is >=2.0 then we recommend using cabal sandboxes. They provide a contained Haskell environment for a given project. They're also easy to clean up and any installed packages won't conflict with any other sandboxed project you may be working on.

$ cd path/to/applied-fp-course
$ cabal sandbox init
$ cabal install --only-dependencies --enable-tests
$ cabal build
$ $EDITOR README.md

To delete a sandbox:

$ cd path/to/applied-fp-course
$ cabal sandbox delete

Nix

If you would like to use a Nix Shell:

$ cd path/to/applied-fp-course
$ nix-shell
$ cabal new-build <levelN>-exe
$ $EDITOR src/<LevelN>/README.md

Once that completes you will be in a nix-shell environment with all the tools required to work through the course.

Stack

Stack yaml configuration is provided and checked by our CI system for successful builds. However the authors do not use stack, so we cannot promise to be able to resolve stack related issues that may arise. Though we will do our best. :)

Please note...

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 Freenode #qfpl IRC channel. You can use the free WebChat client.

Subsequent lessons may contain spoilers, don't cheat yourself out of the experience!

There is a README.md file in each Level module folder that will provide instructions about what the goal is for that specific level.

  • Level 01 : Simple hello world web app.
  • Level 02 : Define our application spec with types!
  • Level 03 : Testing & tools
  • Level 04 : Database layer (sqlite-simple)
  • Level 05 : Better error handling through ExceptT
  • Level 06 : Add some flexible configuration
  • Level 07 : ReaderT & refactoring

-- In Development...

  • Level 08 : Lenses & "classy mtl" monad transformers

-- Maybe...

  • Level 09 : Add session controls (login, logout) and a protected route. So we can have something that resembles application state. For the purposes of modelling the state machine and implementing some property based tests.

Bonus Content

Extension material that doesn't feel like it belongs to the main progression lives in the bonus subdirectory.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].