来自部分应用函数类型的函子
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
不,因为您的实例声明中的 a
与 fmap
类型中的 a
不同。您需要在实例声明中分配一个类型变量,避免 "capturing" a
在 fmap
:
类型中
instance Functor ((->) r) where
fmap :: (a -> b) -> (r -> a) -> (r -> b)
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
不,因为您的实例声明中的 a
与 fmap
类型中的 a
不同。您需要在实例声明中分配一个类型变量,避免 "capturing" a
在 fmap
:
instance Functor ((->) r) where
fmap :: (a -> b) -> (r -> a) -> (r -> b)