加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

克莱斯利,读者和读者在斯卡拉兹是一样的巧合

发布时间:2020-12-16 09:12:04 所属栏目:安全 来源:网络整理
导读:在斯卡拉兹 Kleisli [F,A,B]是A = F [B]. ReaderT [F,B] – 读者单体变压器 – 只是Kleisli [F,B]的别名. 读者[A,B] monad是一个专业的ReaderT与身份monad Id: 类型阅读器[A,B] = ReaderT [Id,B]. 这只是一个巧合,还是有更深层次的原因,克莱斯利,读者和读者
在斯卡拉兹

> Kleisli [F,A,B]是A => F [B].
> ReaderT [F,B] – 读者单体变压器 – 只是Kleisli [F,B]的别名.
>读者[A,B] monad是一个专业的ReaderT与身份monad Id:
类型阅读器[A,B] = ReaderT [Id,B].

这只是一个巧合,还是有更深层次的原因,克莱斯利,读者和读者在斯卡拉兹是同构的?

解决方法

你可以想到它是通过两条不同的路线到达同一个地方.一方面,您从阅读器单体开始,这只是一种功能的包装器.然后,您意识到您想将此读卡器功能集成到具有其他“效果”的较大单体中,因此您将创建一个ReaderT单声道变压器.在这一点上,将您的原始读者[E,?]实现为ReaderT [Id,E,?]是有意义的.

从另一方面来说,您想要一种类型来表示Kleisli箭头(即具有一元返回类型的函数).事实证明,这跟ReaderT是一样的,所以你只是做一个别名.

没有什么非常神秘的“事实证明”的一部分.有一点喜欢,如果你开始使用类似于类的东西的Addable类型类,然后决定使它变得更通用,最终会得到一个只提供关联“添加样”操作的类型类.你已经重新发明了Semigroup!但是,由于历史或教学原因,或者为方便起见,您可能仍然希望保留Addable名称.

这就是Reader和ReaderT发生的一切 – 你不需要这些别名,但它们可以方便,并且可能有助于提高代码的清晰度.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读