我知道它fmap
的类型(a -> b) -> f a -> f b
where f
is a functor (并且根据函子的不同做不同的事情)。我的基本问题是这样的:给定一些调用fmap r x
,ghc 如何找出函子f
是什么,只是给定了x
and的类型r
?
让我更准确地说。假设f
和f'
是这样的函子,对于某些类型f a
= ,但是和是不同的。如果has type和has type ,似乎有两种不同的可能结果:something of type和 something of type 。这种歧义是如何解决的?f' a
a
f b
f' b
r
a -> b
x
f a
fmap r x
f b
f' b
第二个问题:我想通过制作一个奇怪的函子来测试这一点——也许a
对[Int]
任何类型都适用a
并对函数做一些愚蠢的事情……但我显然还没有找到合适的语法让我以这种方式指定函子。(有类似的东西data Newtype a = [Int]
吗?看来我需要先创建一个类型类名称才能使其成为仿函数的实例。)
编辑:我现在明白了,但为了记录,真正的问题(这只是我的问题中隐含的)是我没有意识到你不能拥有一个Foo
类似已经存在Foo a
的类型的函子。Int