Eri*_*ikR 19 haskell functor ghc
我想知道FunctorHaskell中的实例在多大程度上由函子定律(唯一)确定.
由于ghc可以Functor为至少"普通"数据类型派生实例,因此它们似乎必须至少在各种情况下都是唯一的.
为方便起见,Functor定义和函子定律是:
class Functor f where
  fmap :: (a -> b) -> f a -> f b
fmap id = id
fmap (g . h) = (fmap g) . (fmap h)
问题:
可以map从假设它是一个Functor实例开始得出定义data List a = Nil | Cons a (List a)吗?如果是这样,为了做到这一点,必须做出哪些假设?
是否有任何Haskell数据类型具有多个Functor满足函子定律的实例?
什么时候可以ghc派生出一个functor实例而什么时候不能呢?
所有这些都取决于我们如何定义平等吗?该Functor法律在价值的平等的条件下表达,但我们不要求Functors有Eq实例.那么这里有一些选择吗?
关于相等性,肯定存在一种我称之为"构造函数相等"的概念,它允许我们推断任何类型的任何值[a,a,a]都"等于",即使它没有为它定义.所有其他(有用的)平等概念可能比这种等价关系更粗糙.但我怀疑法律中的平等更多是"推理平等"关系,并且可以是特定于应用的.有什么想法吗?[a,a,a]aa(==)Functor
| 归档时间: | 
 | 
| 查看次数: | 1355 次 | 
| 最近记录: |