learn-fp
所属分类:文章/文档
开发工具:Scala
文件大小:482KB
下载次数:0
上传日期:2020-02-07 08:35:13
上 传 者:
sh-1993
说明: 关于scala函数编程的边做边学教程
(learn-by-doing course tutorial for functional programming on scala)
文件列表:
.travis.yml (85, 2020-02-07)
Contributing.md (428, 2020-02-07)
License (35128, 2020-02-07)
build.sbt (318, 2020-02-07)
example.gif (479847, 2020-02-07)
project (0, 2020-02-07)
project\plugins.sbt (0, 2020-02-07)
src (0, 2020-02-07)
src\main (0, 2020-02-07)
src\main\scala (0, 2020-02-07)
src\main\scala\learnfp (0, 2020-02-07)
src\main\scala\learnfp\applicative (0, 2020-02-07)
src\main\scala\learnfp\applicative\Applicative.scala (493, 2020-02-07)
src\main\scala\learnfp\applicative\Disjunction.scala (634, 2020-02-07)
src\main\scala\learnfp\applicative\Id.scala (317, 2020-02-07)
src\main\scala\learnfp\applicative\List.scala (274, 2020-02-07)
src\main\scala\learnfp\applicative\Maybe.scala (470, 2020-02-07)
src\main\scala\learnfp\applicative\State.scala (660, 2020-02-07)
src\main\scala\learnfp\applicative\Writer.scala (799, 2020-02-07)
src\main\scala\learnfp\comonad (0, 2020-02-07)
src\main\scala\learnfp\comonad\CoMonad.scala (415, 2020-02-07)
src\main\scala\learnfp\comonad\Env.scala (709, 2020-02-07)
src\main\scala\learnfp\comonad\Id.scala (287, 2020-02-07)
src\main\scala\learnfp\contravariant (0, 2020-02-07)
src\main\scala\learnfp\contravariant\ContravariantFunctor.scala (473, 2020-02-07)
src\main\scala\learnfp\contravariant\Predicate.scala (278, 2020-02-07)
src\main\scala\learnfp\contravariant\Show.scala (239, 2020-02-07)
src\main\scala\learnfp\foldable (0, 2020-02-07)
src\main\scala\learnfp\foldable\Foldable.scala (1990, 2020-02-07)
src\main\scala\learnfp\free (0, 2020-02-07)
src\main\scala\learnfp\free\Free.scala (1229, 2020-02-07)
src\main\scala\learnfp\functor (0, 2020-02-07)
src\main\scala\learnfp\functor\Disjunction.scala (980, 2020-02-07)
src\main\scala\learnfp\functor\Functor.scala (633, 2020-02-07)
src\main\scala\learnfp\functor\Id.scala (199, 2020-02-07)
src\main\scala\learnfp\functor\List.scala (184, 2020-02-07)
src\main\scala\learnfp\functor\Maybe.scala (616, 2020-02-07)
... ...
# Learn Functional Programming course/tutorial on Scala [![Build Status](https://travis-ci.org/dehun/learn-fp.svg?branch=master)](https://travis-ci.org/dehun/learn-fp) [![Build Status](https://travis-ci.org/dehun/learn-fp.svg?branch=answers)](https://travis-ci.org/dehun/learn-fp) #
## 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:
- https://blog.scalac.io/2017/04/19/typeclasses-in-scala.html
### 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
- https://en.wikibooks.org/wiki/Haskell/Applicative_functors
- http://eed3si9n.com/learning-scalaz/Applicative.html
### 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:
- http://eed3si9n.com/learning-scalaz/Monad+transformers.html
### Free monad ###
- Implement `learnfp/free/Free.scala` and pass all unit tests in `learn-fp/src/test/scala/learnfp/free/FreeTest.scala`
- Extra material:
- http://blog.krobinson.me/posts/monads-part-2-the-free-monad/
- https://underscore.io/blog/posts/2015/04/14/free-monads-are-simple.html
### 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 yuriy.netesov@gmail.com
You also are very welcome to create PR.
# Credits #
- Yuriy Netesov - initial implementation
- Extra material references are owned by other authors
近期下载者:
相关文件:
收藏者: