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
答案 0 :(得分:4)
不,因为您的实例声明中的a
与a
类型中的fmap
不同a
。您需要在实例声明中指定一个类型变量,以避免在fmap
类型中"capturing" instance Functor ((->) r) where
fmap :: (a -> b) -> (r -> a) -> (r -> b)
:
{{1}}