克莱斯利,读者和读者在斯卡拉兹是一样的巧合
在斯卡拉兹
> Kleisli [F,A,B]是A => F [B]. 这只是一个巧合,还是有更深层次的原因,克莱斯利,读者和读者在斯卡拉兹是同构的? 解决方法
你可以想到它是通过两条不同的路线到达同一个地方.一方面,您从阅读器单体开始,这只是一种功能的包装器.然后,您意识到您想将此读卡器功能集成到具有其他“效果”的较大单体中,因此您将创建一个ReaderT单声道变压器.在这一点上,将您的原始读者[E,?]实现为ReaderT [Id,E,?]是有意义的.
从另一方面来说,您想要一种类型来表示Kleisli箭头(即具有一元返回类型的函数).事实证明,这跟ReaderT是一样的,所以你只是做一个别名. 没有什么非常神秘的“事实证明”的一部分.有一点喜欢,如果你开始使用类似于类的东西的Addable类型类,然后决定使它变得更通用,最终会得到一个只提供关联“添加样”操作的类型类.你已经重新发明了Semigroup!但是,由于历史或教学原因,或者为方便起见,您可能仍然希望保留Addable名称. 这就是Reader和ReaderT发生的一切 – 你不需要这些别名,但它们可以方便,并且可能有助于提高代码的清晰度. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |