作为Haskell中的Functor实例的部分应用函数类型(a->)

问题描述 投票:3回答:1

我正在阅读《 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,答案为:。 ..

haskell functor
1个回答
6
投票

实际上没有什么比这更多的了,对于函子ffmap的实现(已知对于任何可能的f最多是一个实现)必须具有类型(a -> b) -> f a -> f b,并且满足两个函子定律:

© www.soinside.com 2019 - 2024. All rights reserved.