来自部分应用函数类型的函子

functors from partially applied function type

Haskell 中的编程中有一个问题说: 完成以下声明:

instance Functor ((->) a) where

现在 Functor Thing 的类型定义为:

instance Functor Thing where    
   --fmap::(a -> b) -> Thing a -> Thing b 

我想知道这种减少是否有意义:

instance Functor ((->) a) where
    -- fmap::(a -> b) -> ((->) a) a -> ((->) a) b 
    -- therefore
    -- fmap::(a -> b) -> a -> a -> (a -> b) 
    -- therefore
    -- fmap::b -> b

--更新--- 我漏了括号,应该是

instance Functor ((->) a) where
    -- fmap::(a -> b) -> ((->) a) a -> ((->) a) b 
    -- therefore
    -- fmap::(a -> b) -> (a -> a) -> (a -> b) 
    -- therefore
    -- I should be returning a function of a -> b

不,因为您的实例声明中的 afmap 类型中的 a 不同。您需要在实例声明中分配一个类型变量,避免 "capturing" afmap:

类型中
instance Functor ((->) r) where
  fmap :: (a -> b) -> (r -> a) -> (r -> b)