【发布时间】:2017-04-25 08:51:04
【问题描述】:
考虑到 kind * -> * 的类型,我正在尝试寻找规则并建立直觉,以了解何时可以使用该类型的 Functor。
到目前为止,我看到的规则如下:
- 对于有限制的容器类型没有
Functor实例 关于包含的值。
示例:您不能拥有 Set 的 Functor 实例,因为包含的值需要 Ord
- 没有用于逆变数据类型的
Functor实例。
例子:
newtype Contra a = Contra (a -> Int)
除此之外,还有其他情况吗?
【问题讨论】:
-
不是重复的,而是相关的:stackoverflow.com/q/7220436/477476
-
为什么不建设性地制定它:当你可以有一个 Functor 实例的情况是什么?考虑到这一点,IMO 总是更有用。
-
我想你可以计算类型错误的类型,例如
newtype Fix f = Fix { unFix :: f (Fix f) }有一种Fix :: (* -> *) -> *,而Functor需要一种类型为* -> *的构造函数,即Functor :: (* -> *) -> Constraint。 (不过,Fix是一般范畴意义上的函子,从 Haskell 内函子范畴到 Haskell 类型范畴。) -
@leftaroundabout 我正在寻找一些规则以及它们背后的直觉。在某些时候,我认为您可以为任何容器提供函子,这显然是错误的。所以我觉得除了少数情况外,大多数容器都可以使用 Functor 实例。
-
@cactus 我已经看到了链接的问题,但我正在尝试识别其他规则并建立直觉
标签: haskell typeclass functor category-theory