部分应用函数类型的函子

时间:2017-07-26 04:26:37

标签: haskell functor

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

1 个答案:

答案 0 :(得分:4)

不,因为您的实例声明中的aa类型中的fmap不同a。您需要在实例声明中指定一个类型变量,以避免在fmap类型中"capturing" instance Functor ((->) r) where fmap :: (a -> b) -> (r -> a) -> (r -> b)

{{1}}