我是 Haskell 的新手,不知道哪个是惯用的 - 使用前缀形式或中缀形式的运算符。到目前为止,我注意到,名称中带有特殊字符的函数(例如<$>
,<*>
等>>=
)以中缀形式使用,但名称由字母组成的函数以前缀形式使用。我的猜测是这是受到数学的启发,尽管我不确定。
我查找了Blow your mind,Category:Idioms并且还搜索了stackoverflow,但无济于事。
编辑
澄清一下,什么时候中缀函数和前缀运算符是惯用的?
我是 Haskell 的新手,不知道哪个是惯用的 - 使用前缀形式或中缀形式的运算符。到目前为止,我注意到,名称中带有特殊字符的函数(例如<$>
,<*>
等>>=
)以中缀形式使用,但名称由字母组成的函数以前缀形式使用。我的猜测是这是受到数学的启发,尽管我不确定。
我查找了Blow your mind,Category:Idioms并且还搜索了stackoverflow,但无济于事。
澄清一下,什么时候中缀函数和前缀运算符是惯用的?
您可以以任何方式调用任何函数。
fmap foo bar
foo `fmap` bar
(<$>) foo bar
foo <$> bar
至于调用它们时的惯用语,这是一个有点软的问题,但这里有一些指导方针:
fmap
and <$>
),则使用可以让您使用较少括号的任何一个。(`foo` bar)
比 更常见flip foo bar
。needle `elem` haystack
比 更常见elem needle haystack
。其他常见的包括div
和mod
。但是,我不知道任何相反的情况,通常将运算符用作前缀。至于你是否应该让你的新函数成为运算符,答案几乎总是否定的。命名函数通常更容易理解。这种情况下的例外情况是,如果它是您在单个表达式中链接很多的东西(例如 Servant 的:<|>
and :>
),以及在问题域中常见且众所周知的运算符。