我一直在阅读关于自由单子的一些 材料, 虽然我认为我离实现还有很大的距离,但我认为我更接近了解它们的本质!根据以上资源,我的理解是自由单子可以“释放”“计算”工作中的“单子”(一种数据类型)。换句话说,自由单子提供了像join和map这样的接口,客户端将自己实现它们。
换句话说,自由单子提供了join和map等接口,客户端将自己实现这些接口? 从某种意义上来说是的。但我认为更好的表述方式是:“一个自由单子提供了一种语言,而其实例则实现了该语言的不同解释器。” 单子是自由的,因为它没有受到任何其他约束,只受到单子法则的限制。它的实例不是自由的,因为特定的解释会添加额外的约束。
f
是一个函子,那么给定data Free f r = ...
,则Free f
就是一个单子,而无需考虑f
到底是什么。 - chepner