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

近期下载者

相关文件


收藏者