我正在阅读《 Haskell编程》(第二版),偶然发现了练习2,第12章,第2部分:]
instance Functor ((->) a) where fmap = TODO
答案是:
instance Functor ((->) a) where fmap = (.)
这让我挠了好久。我想从直觉上来说,这确实对我有意义(部分组合函数类型
a ->
是组合函数fmap
时的函子),但是我认为一些很好的例子将巩固我对该练习的理解。
我想出了这两个:
main = do putStrLn . show $ (fmap (+1) (*2)) (5 :: Int) putStrLn . show $ (fmap (show) (+1)) 3
我的示例正确地说明了此练习吗?
[fmap
给定两个参数:
UPDATE
[fmap
给定两个参数:
对我来说看起来很奇怪,我不确定我是否理解正确。
[我在SO上看到一些类似的问题(例如this one),其中this one几乎是我要寻找的东西,但不完全是(我只是在寻找函子的例子,没有其他东西-没有应用程序,也没有monads)。
我正在阅读《 Haskell编程》(第二版),偶然发现了练习2,第12章,第2部分:实例函子((->)a),其中fmap = TODO,答案为:。 ..
实际上没有什么比这更多的了,对于函子f
,fmap
的实现(已知对于任何可能的f
最多是一个实现)必须具有类型(a -> b) -> f a -> f b
,并且满足两个函子定律: