有没有理由更喜欢以下其中一种符号而不是其他符号?这只是一个偏好问题?
map toLower "FOO"
fmap toLower "FOO"
toLower <$> "FOO"
暂且不说:我意识到<$>
与`fmap`
相同。我是否认为map
只是fmap
的一般形式?
答案 0 :(得分:39)
正如您所说,map
是fmap
的一般形式。如果你知道你有一个列表,那么我会使用map
,因为它使代码更清晰,如果你犯了错误,错误信息可能不那么令人困惑。但在很大程度上,这是一个偏好问题。
(<$>)
与fmap
相同。在GHC 7.10之前它没有被Prelude导出,因此默认情况下不可用 - 但即使使用较旧的GHC版本,也可以从Data.Functor
或Control.Applicative
轻松导入,而这些天它几乎是标准方式这样做。
答案 1 :(得分:12)
我同意Ganesh的观点,map
对于列表更清楚。我使用<$>
而非fmap
,除非部分应用。所以我使用fmap reverse
声明一个函数来反转某个仿函数的所有元素但是如果我有所有可用的参数(例如,如果我在do
块中写一行)我倾向于使用运算符表单:reverse <$> f x