假设两个新类型是这样定义的
type MyProductType a = (FType1 a, FType2 a)
type MyCoproductType a = Either (FType1 a) (FType2 a)
……那FType1
andFtype2
都是Functor
.
如果现在要声明MyProductType
andMyCoproductType
作为 的实例Functor
,编译器是否需要为它们各自fmap
的 's 明确定义,还是可以从以前的定义中推断出这些定义?
另外,这个问题的答案是依赖于实现的,还是遵循 Haskell 规范?
作为背景,这个问题的动机是试图理解我正在阅读的内容中的一句话。作者首先定义
type Writer a = (a, String)
...然后写(我的重点)
...
Writer
类型构造函数在a
. 我们甚至不需要实现fmap
它,因为它只是一个简单的产品类型。
强调的文字是我试图理解的评论。我认为这意味着 Haskell 可以根据函数类型推断任何fmap
ADT 的's ,特别是,它可以推断“简单产品类型”之类的我正在正确阅读Ørjan Johansen的答案)。fmap
Writer
至于作者那句话是什么意思,现在我真的不知道了。也许他的意思是,不值得费心地重新定义Writer
它的功能性可以明确,因为它是一种“简单......类型”。(在这里抓住稻草。)