All Projects → dehun → Learn Fp

dehun / Learn Fp

Licence: gpl-3.0
learn-by-doing course/tutorial for functional programming on scala

Programming Languages

scala
5932 projects

Projects that are alternatives of or similar to Learn Fp

Language Ext
C# functional language extensions - a base class library for functional programming
Stars: ✭ 3,964 (+623.36%)
Mutual labels:  monad, monads, functor, functional-programming
Static Land
Specification for common algebraic structures in JavaScript based on Fantasy Land
Stars: ✭ 699 (+27.55%)
Mutual labels:  monad, functor, functional-programming
Bow
🏹 Bow is a cross-platform library for Typed Functional Programming in Swift
Stars: ✭ 538 (-1.82%)
Mutual labels:  monad, functor, functional-programming
Fp Core.rs
A library for functional programming in Rust
Stars: ✭ 772 (+40.88%)
Mutual labels:  monad, functor, functional-programming
Magic In Ten Mins
十分钟魔法练习
Stars: ✭ 327 (-40.33%)
Mutual labels:  monad, tutorial, functional-programming
Fpgo
Monad, Functional Programming features for Golang
Stars: ✭ 165 (-69.89%)
Mutual labels:  monad, monads, functional-programming
Lambda
Functional patterns for Java
Stars: ✭ 737 (+34.49%)
Mutual labels:  monad, functor, functional-programming
Monio
Async-capable IO monad for JS
Stars: ✭ 311 (-43.25%)
Mutual labels:  monad, monads, functional-programming
Whyhaskellmatters
In this article I try to explain why Haskell keeps being such an important language by presenting some of its most important and distinguishing features and detailing them with working code examples. The presentation aims to be self-contained and does not require any previous knowledge of the language.
Stars: ✭ 418 (-23.72%)
Mutual labels:  monads, functor, functional-programming
Purefun
Functional Programming library for Java
Stars: ✭ 37 (-93.25%)
Mutual labels:  monad, monads, functional-programming
Purify
Functional programming library for TypeScript - https://gigobyte.github.io/purify/
Stars: ✭ 843 (+53.83%)
Mutual labels:  monad, functor, functional-programming
Functional Examples
Examples with Functional JavaScript, following Professor Frisby's course
Stars: ✭ 179 (-67.34%)
Mutual labels:  monad, functor, functional-programming
Mostly Adequate Guide Chinese
函数式编程指北中文版
Stars: ✭ 2,093 (+281.93%)
Mutual labels:  monad, functor, functional-programming
Funcadelic.js
Functional programming and category theory for everyday JavaScript development
Stars: ✭ 183 (-66.61%)
Mutual labels:  monad, functor, functional-programming
Golang Tutorials
Go Tutorials - Let's get our hands really dirty by writing a lot of Golang code
Stars: ✭ 277 (-49.45%)
Mutual labels:  tutorial, functional-programming
Scriptum
A fool's scriptum on functional programming
Stars: ✭ 346 (-36.86%)
Mutual labels:  monad, functional-programming
Pycadl
Python package with source code from the course "Creative Applications of Deep Learning w/ TensorFlow"
Stars: ✭ 356 (-35.04%)
Mutual labels:  tutorial, course
Fun Task
Abstraction for managing asynchronous code in JS
Stars: ✭ 363 (-33.76%)
Mutual labels:  monad, functional-programming
Fp Resources
Functional programming great resources
Stars: ✭ 369 (-32.66%)
Mutual labels:  monad, functional-programming
Mu Scala
Mu is a purely functional library for building RPC endpoint based services with support for RPC and HTTP/2
Stars: ✭ 266 (-51.46%)
Mutual labels:  monads, functional-programming

Learn Functional Programming course/tutorial on Scala Build Status Build Status

Intro

This course/tutorial was created with purpose to better understand functional programming idioms using Scala language. It covers type classes, monoids, functors, applicatives, monads, traversable/foldable, monad transformers, free monad.
Material is structured as set of stub/unimplemented functions/classes and tests for them. Your objective is to make all unit tests green. It is learn-by-doing course.

Example session

Example session

Inspiration

NICTA course was a great and interesting challenge for me to do in Haskell. I think Scala community will benefit from the similar course.

Target audience

The material in here is quite poor on theoretical/explanation part. I have tried to link material from other authors that I have found to be good into this course Readme to compensate for this. Some prior experience with functional idioms is recommended, but not necessary.

How to start

Just git clone this repository and follow steps in progression section. You can use any IDE and verify your results using sbt test. For me intellij works best - you can easily run individual tests out of it. In case if you got stuck - check answers branch.

Progression

It is important to keep the progression - a lot of things depend on each other. Implementing something = making all tests green for that thing.

Type classes

Monoids

  • Observe general monoid pattern in learnfp/monoid/Monoid.scala
  • Implement learn-fp/src/main/scala/learnfp/monoid/ListMonoid.scala
  • Implement learn-fp/src/main/scala/learnfp/monoid/SimpleMonoid.scala
  • Implement learnfp/monoid/PairAdditiveMonoid.scala
  • Extra material:
    • Bartosz Milewski: Category Theory 3.1: Examples of categories, orders, monoids

Functors

Monads

  • Observe general monad pattern in learnfp/monad/Monad.scala
  • Implement learnfp/monad/Id.scala
  • Implement learnfp/monad/Maybe.scala
  • Implement learnfp/monad/List.scala
  • Implement learnfp/monad/Disjunction.scala
  • Implement learnfp/monad/Writer.scala
  • Implement learnfp/monad/State.scala
  • Extra material

Foldable

  • Implement foldable in learnfp/foldable/Foldable.scala

Applicatives

Traversable

  • Implement learnfp/traversable/Traversable.scala

Nested

  • Implement learnfp/nested/Nested.scala

IO

  • Implement learnfp/io/IO.scala

Monad Transformers

  • Observe general monad transformer typeclass in learnfp/transformer/MonadTransformer.scala
  • Implement learnfp/transformer/IdT.scala
  • Implement learnfp/transformer/MaybeT.scala
  • Implement learnfp/transformer/WriterT.scala
  • Implement learnfp/transformer/StateT.scala
  • Extra material:

Free monad

Contravariant functor

  • Observe general contravariant functor pattern in learnfp/contravariant/ContravariantFunctor.scala
  • Implement learnfp/contravariant/Show.scala
  • Implement learnfp/contravariant/Predicate.scala

CoMonads

  • Observe general comonad pattern in learnfp/comonad/CoMonad.scala
  • Implement learnfp/comonad/Id.scala
  • Implement learnfp/comonad/Env.scala

Bonus

  • Implement Reader functor, monad, applicative and write unit tests for that
  • Implement ReaderT and write unit tests for that
  • Implement applicative for monad transformers
  • Implement applicative for Free

What was left out

  • Reader/ReaderT
  • Eff

Bugs/Issues

In case if find a bug/issue - please report it to https://github.com/dehun/learn-fp/issues or e-mail me on [email protected]
You also are very welcome to create PR.

Credits

  • Yuriy Netesov - initial implementation
  • Extra material references are owned by other authors
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].