Haskell 中的预定义中缀运算符列表?

Pre-defined infix operator list in Haskell?

基本上,我需要为函数组合定义中缀运算符,翻转g . f方式。

(#) :: (a -> b) -> (b -> c) -> a -> c
(#) = flip (.)

infixl 9 #

在这里,我暂时只选择了符号:#,但我不确定这个选择在与其他定义冲突方面没有问题。

奇怪的是我在 Haskell.

中找不到预定义的中缀运算符列表

我希望组合运算符尽可能简洁,希望是像.这样的单个字符,如果可能的话,我想做成&。可以吗?

是否有任何指导或最佳实践教程?请指教

相关问答:

What characters are permitted for Haskell operators?

您没有看到 Haskell built-in 运算符的列表,原因与您没有看到所有 built-in 函数的列表的原因相同。他们无处不在。有些在 Prelude,有些在 Control.Monad,等等。运算符在 Haskell 中并不特殊;它们是具有简洁语法的普通函数。而且 Haskell 人一般都很漂亮 operator-happy。花时间在你最喜欢的镜头库里,你会发现很多 amusing-looking operators.

(#)而言,最好避免。我不知道有任何 built-in 运算符调用它,但是在解析时 # 可以是 a bit special。具体来说,编译器扩展在普通标识符的末尾启用 #,GHC 遵循这种做法定义了许多 built-in(原始)类型。例如,Int 是通常的(装箱)整数类型,而 Int# 是原始整数。大多数人不需要直接与它交互,但它是 # 在 Haskell 中的一个用途,添加您的运算符会稍微混淆它。

您的 (#) 接线员称为 (>>>) in Haskell, and it works on all Category instances, including functions. Its companion is (<<<), the generalization of (.) to all Category instances. If three characters is too long for you, I've seen it called (|>) in some other languages, but Haskell already uses that operator for something else。如果您不使用 Data.Sequence,则可以使用该运算符。但就个人而言,我会选择 (>>>)。任何 Haskell 人都会很快认出它。