Haskell编码风格:map、fmap或<$>;?
是否有任何理由选择下列符号之一而不是其他符号,或者这仅仅是一个偏好问题Haskell编码风格:map、fmap或<$>;?,haskell,functional-programming,coding-style,Haskell,Functional Programming,Coding Style,是否有任何理由选择下列符号之一而不是其他符号,或者这仅仅是一个偏好问题 map toLower "FOO" fmap toLower "FOO" toLower <$> "FOO" 映射到下面的“FOO” fmap toLower“FOO” toLower“FOO” 顺便说一句:我意识到与`fmap`是一样的。我认为map只是fmap的一种不太一般的形式,这一假设正确吗 正如您所说,map是fmap的一种不太通用的形式。如果您知道您有一个列表,那么我将使用map,因为它可以使
map toLower "FOO"
fmap toLower "FOO"
toLower <$> "FOO"
映射到下面的“FOO”
fmap toLower“FOO”
toLower“FOO”
顺便说一句:我意识到
与`fmap`
是一样的。我认为map
只是fmap
的一种不太一般的形式,这一假设正确吗 正如您所说,map
是fmap
的一种不太通用的形式。如果您知道您有一个列表,那么我将使用map
,因为它可以使代码更清晰,如果您犯了错误,错误消息可能不会那么混乱。然而,在很大程度上,这是一个偏好的问题
()
与fmap
相同。在GHC 7.10之前,它没有在Prelude中导出,因此默认情况下不可用-但即使使用较旧的GHC版本,也可以很容易地从数据.Functor
或控件.Applicative导入,而现在这几乎是实现这一点的标准方法。我同意Ganesh的观点,即映射
对于列表来说更清晰。我在fmap
上使用
,除非部分应用。因此,我会使用fmap reverse
来声明一个函数,该函数会反转某些函子的所有元素,但如果我有所有可用的参数(例如,如果我在do
块中写一行),我倾向于使用运算符形式:reverse fx
我经常使用中缀符号fmap
,例如:reverse`fmap`x
,因为fmap
在前奏中,所以我不必导入Control.Applicative。然后,如果我需要部分应用程序,我最终会写:f=(反向“fmap”)
我发现只使用fmap
函数简单明了(前缀)看起来更好,但可能那只是我自己……不过,当我也使用
时,我确实使用了
。而liftM
与fmap
相同,除了它在Monad
而不是Functor
上重载之外。同样,prelude在最新版本中导出了广义for
。