學習haskell的過程中有哪些值得一做的練手項目?


寫個深度學習的框架。比如 @帥氣可愛魔理沙 的 ThoughtWorksInc/DeepDarkFantasy


謝邀。

Type Inference

實現 Algorithm W for Hindley-Milner polymorphic type inference

https://github.com/wh5a/Algorithm-W-Step-By-Step/blob/master/AlgorithmW.pdf

相關資料

Type Inference

https://cs.anu.edu.au/courses/comp4630/lectures/Typed-LC-lect3.pdf

Unification

http://www.cse.unsw.edu.au/~cs3161/14s2/lectures/10/TypeInference.pdf

Monad

Monad Transformers Step by Step

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.71.596rep=rep1type=pdf


msakai/toysolver


  • 一個簡單的 Parser Combinator, 當時我寫了個用來應付編譯原理作業. 可以參考 Monadic parsing in Haskell 和 Hutton 的 Programming in Haskell 相關章節, 稍微入門 Haskell 就可以寫了, 對理解 Monad, Applicative 還有以後用其他完備的 Parser Combinator 挺有幫助, 雖然實現上差距相當大
  • 基於上面的 Parser Combinator 寫各種 Parser: S-Exp, JSON, HTTP, 某個二進位協議(例如 Memcache?) 有錯誤信息/恢復/位置, 做 benchmark, 體會各種 PC 的差別/拓展(parsec, attoparserc, readp)和自己的渣渣
  • R5RS 編譯到 MIPS 模擬器, 寫編譯器算是 Haskell 看家項目, 所以提高點難度
  • GNU Coreutils 里的各種工具, 可以用各種解析命令行參數的庫, 還有各種 Stream 抽象的庫, 不爽的話繼續 benchmark,你會發現為什麼 GNU 那幫人這麼變態, 參考: alexander-b/coreutilhs https://wiki.haskell.org/Simple_Unix_tools
  • 一個簡單的 Web Framework, 可以理解Reader Monad, Monad Transformer, Haskell 應用的 Monad Stack 之類的吧, 可以參考 cbaatz/build-a-haskell-web-framework
  • 把火車頭書(Java Concurrency in Practice) 跟 java.util.concurrent 用 Haskell 過一遍, 體會 Haskell 的並發優勢 (逃
  • 上面都寫完再繼續吧


ninegua 大神有個關於Parser的手把手教程

Haskell 中文社區 :: 手把手教你做λ(八)替換與歸約


推薦閱讀:

函數式-21天入門教程
如何理解F#里的 Computation Expressions (Haskell 里的 Monads? )
愉悅的scheme之旅(2)--用callcc合成控制流
R語言函數式編程purrr的應用
Erlang入門教程 - 8. 在終端上輸出

TAG:函數式編程 | Haskell |