寻找学习练习:实施这些单子

bra*_*rad 7 monads functional-programming

在学习新的编程主题时,我通常遵循一种模式:我读到它,我理解它,然后我编写了几个例子来确保我真的得到它.

我已经阅读了很多关于monad的内容,我相信我理解并得到它们.我现在正处于一个阶段,我真的想编写一些monad来巩固我的理解,并真正弄清楚如何为各种类型实现bind.

问题是我无法想到许多明显的monad要实现,所以我正在寻找建议.最好是,我想要一个推荐列表,一些简单的,一些不那么容易.

我也意识到虽然monad用于在功能程序中"封装"副作用,但它们也比这更通用.因此,我希望建议包括既包含副作用又包含一些常规效果的monad.

谢谢!

(作为旁注:我将使用f#来做到这一点,但我认为这个问题可能适用于任何函数式语言).

Bri*_*ian 5

我认为All About Monads中的目录是一个好的开始(延续monad实际上对于catamorphisms很有用,参见例如这里); 另外解析器,以及可能的事务效果. Async是另一个尝试自己实现的好方法(逻辑单线程代码,跨越不同的实际线程进行非阻塞).而Reactive Framework的潜在monad 看起来是一个很好的高级挑战.