在以下代码段中,我错误地使用entailFunctor
和 t
标记r
,而不只是t
。因此,当我尝试使用它时,我在范围内同时需要t
和r
。
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators #-}
import Data.Constraint
import Data.Tagged
import Data.Proxy
entailFunctor :: Tagged (t r) (() :- (Functor t))
entailFunctor = undefined
newtype Foo t r = Foo (t r)
instance Functor (Foo t) where
fmap f (Foo a) = Foo $ fmap f a \\ proxy entailFunctor (Proxy::Proxy (t r))
这是一个问题因为(至少我编写Functor
实例的方式)r
在范围内不是。然而,这与GHC 8.0.1编译!这是一个错误,如果没有,那么类型变量r
在fmap
的定义中引用了什么?