haskell - Haskell 类型类实例语法
问题描述
假设我有一个MayFail
定义如下的数据类型
data MayFail e a = Error e | Result a
deriving (Show)
所以要么是结果,要么是错误。我现在想Functor
为它写一个,但这就是它令人困惑的地方。
MayFail
有两种类型,要么e
要么a
。那么为什么我要写仿函数如下
instance Functor (MayFail e) where
fmap _ (Error e) = Error e
fmap f (Result x) = Result (f x)
而不是instance Functor (MayFail e a) where
?
这背后的句法规则是什么?
解决方案
你的问题有点不清楚,但我假设你在问为什么你必须使用e
ininstance Functor (MayFail e)
而不仅仅是写instance Functor MayFail
.
这是因为Functor
接受了 kind 的类型参数Type -> Type
,并且MayFail
它本身就有 kind Type -> Type -> Type
。(使用MayFail e a
也是错误的,因为它的种类只是Type
.)
推荐阅读
- c# - 有没有办法使用 bool 来检测 foreach 循环中的错误值,这样我的方法就不会执行?
- c# - 仅提取某些索引
- google-chrome - Chrome 嵌入 SVG 会导致无限请求
- hl7 - CDA 模式中唯一部分的数量
- python - how to insert file name into "to_csv"
- azure - Azure Policy Deny:如果资源组名称中不存在标记之一
- javascript - 不要使用构造函数
- javascript - canvas js用图像填充弧线
- r - 使用 ggplot2 制作日志热图
- java - 链表实现的时间复杂度差异(迭代VS递归)?