haskell - 绑定到 Haskell 中数据结构内的 monad
问题描述
有没有办法定义只影响数据结构的一部分的绑定?
例如,假设我们有一个具有名称和结果的模拟计算数据类型。
type Name = String
data Error = TimeOut | NotEnoughMemory | DivByZero
type Result a = Either Error a
data Computation a = Computation Name (Result a)
由于计算可能会失败,但我们可能仍然对其名称感兴趣,因此它不能是 Result 的一部分,而必须是 Computation 的一部分。另一方面,直接绑定和验证计算结果也很方便,就像使用常规的 Either 类型一样。有没有办法做到这一点?
解决方案
不,您可能无法定义任何有用instance Monad Computation
的 ,因为您无法pure :: a -> Computation a
从Applicative
类(它是 的超类Monad
)中定义;您将如何实例化Name
给定的类型值a
?
这是一个Functor
虽然(你可以自动推导出它)。有了更多的上下文,可能会有一个更有用的不同抽象。
推荐阅读
- pdf - Cupsfilter 编码错误““x”并且在终端中打印/将 html 转换为 pdf 时自定义页面大小无效
- linux - 如何显示在给定范围内使用内存的进程
- php - PHP 脚本在类上调用 require_once() 时终止
- c# - 在源代码中管理不同环境的配置信息是不好的做法吗?
- jpa - 使用 Plantuml 从实体类创建数据模型
- java - 在 Android Studio 上出现“未能合并 dex”错误
- corda - 权限被拒绝通过 systemctl 启动 Cordapp
- ios - UIViewController 多重继承
- mysql - 如何在 MySQL 中处理 BLOB 内容?
- javascript - 检查第二个字符串是否是另一个字符串的旋转