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