Learn-by-doing functional programming course on Scala alternatives and similar packages
Based on the "Misc." category.
Alternatively, view Learn-by-doing functional programming course on Scala alternatives based on common mentions on social networks and blogs.
-
Exercism - Scala Exercises
Crowd-sourced code mentorship. Practice having thoughtful conversations about code. -
Scala school
Lessons in the Fundamentals of Scala -
Scala Exercises
The easy way to learn Scala. -
Demos and Examples in Scala (Chinese)
8.9 0.0 Learn-by-doing functional programming course on Scala VS Demos and Examples in Scala (Chinese)scala、spark使用过程中,各种测试用例以及相关资料整理 -
A Tour of Scala
The standard Scala XML library -
Functional Programming for Mortals
source and examples to Functional Programming for Mortals with Scalaz -
The Type Astronaut's Guide to Shapeless
4.4 2.0 Learn-by-doing functional programming course on Scala VS The Type Astronaut's Guide to ShapelessExample code to accompany shapeless-guide. -
Get Programming with Scala
Code for the book "Get Programming with Scala" (Manning) -
Deploying Scala libraries to Sonatype for dummies
Deploying scala libraries to central for dummies -
CA Art
Learn Cellular Automata through generative art -
Scalera Blog
Blog about Scala language and its environment (howto's, good practices, tips,...). Weekly posts written in both spanish and english -
List of Scala Online Courses
A list of free and paid Scala online courses by Classpert, An online course search and comparison website -
Scala Days Conferences
A youtube channel that provides full fledged videos, recorded at Scala Days Conferences -
Dr. Mark Lewis
Resources by Dr. Mark Lewis >> Website | Youtube Playlists -
Functional Programming in Scala
Coursera Specialization (5 courses) created by Martin Odersky et al. at the EPFL (Ecole polytechnique fédérale de Lausanne). -
Reactive Programming with Scala and Akka
Use the concepts of reactive programming to build distributed systems running on multiple nodes -
Scala Collections Cookbook
Scala collections introduction. written in Chinese. -
Scala With Cats
Learn system architecture and design using the techniques of modern functional programming with Cats -
Scala for the Impatient 2nd Edition
Covers most Scala features with short and easy to understand explainations.
Access the most powerful time series database as a service
Do you think we are missing an alternative of Learn-by-doing functional programming course on Scala or a related project?
Popular Comparisons
-
Learn-by-doing functional programming course on ScalavsScala With Cats
-
Scala With CatsvsFunctional Programming for Mortals
-
Scala With CatsvsReactive Programming with Scala and Akka
-
Introduction to programming with dependent types in ScalavsExercism - Scala Exercises
-
Scala With CatsvsThe Type Astronaut's Guide to Shapeless
README
Learn Functional Programming course/tutorial on Scala

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](example.gif?raw=true "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
- Observe general type class pattern in
learnfp/typeclass/TypeClass.scala
. - Implement
learnfp/typeclass/TotalOrder.scala
- Implement
learnfp/typeclass/Show.scala
- Implement
learnfp/typeclass/Eq.scala
- Extra material:
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
- Observe general functor pattern in
learnfp/functor/Functor.scala
- Implement
learnfp/functor/Id.scala
- Implement
learnfp/functor/Maybe.scala
- Implement
learnfp/functor/List.scala
- Implement
learnfp/functor/Disjunction.scala
- Implement
learnfp/functor/Writer.scala
- Implement
learnfp/functor/State.scala
- Extra material:
- http://learnyouahaskell.com/functors-applicative-functors-and-monoids
- https://thedet.wordpress.com/2012/04/28/functors-monads-applicatives-can-be-so-simple/
- Bartosz Milewski: Category Theory 6.1: 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
- Brian Beckman: Don't fear the Monad
- http://eed3si9n.com/learning-scalaz/Monad+transformers.html
Foldable
- Implement foldable in
learnfp/foldable/Foldable.scala
Applicatives
- Observe general applicative pattern in
learnfp/applicative/Applicative.scala
- Implement
learnfp/applicative/Id.scala
- Implement
learnfp/applicative/Maybe.scala
- Implement
learnfp/applicative/List.scala
- Implement
learnfp/applicative/Disjunction.scala
- Implement
learnfp/applicative/Writer.scala
- Implement
learnfp/applicative/State.scala
- Extra material
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
- Implement
learnfp/free/Free.scala
and pass all unit tests inlearn-fp/src/test/scala/learnfp/free/FreeTest.scala
- Extra material:
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