〜的优先级是什么,为什么?

cro*_*eea 18 haskell

以下代码段编译:

{-# LANGUAGE TypeFamilies #-}
type family Foo a b

f :: (Foo a b ~ Int) => a -> b -> b
f = error ""
Run Code Online (Sandbox Code Playgroud)

但是中类型操作符似乎表现不同:

{-# LANGUAGE TypeFamilies #-}
type family a \\ b

f :: (a \\ b ~ Int) => a -> b -> b
f = error ""
Run Code Online (Sandbox Code Playgroud)

GHC抱怨第二个论点\\应该是善意的*,但是b ~ Int有点善意Constraint.当然这可以用parens修复,但我想知道是否还有另一种方法.

我试过设置我的运营商与固定性声明的优先级infixl 9 \\,但这并不解决问题,这表明的优先级~至少9(如果我解释是正确的).我尝试使用这个答案中的技巧让GHCi告诉我优先级~,但它没有用.

从技术上讲,~可能不是一个类型操作符,它更像是一个类似的词法结构,,但问题仍然存在:

  1. 为什么中缀和前缀运算符表现出不同的行为?
  2. 为什么~绑这么紧?
  3. 有什么我可以做的让我自己的运营商绑定更严格?

(注意:这个问题询问类型函数的优先级,但它没有说明任何内容~.)

lig*_*ght 1

~不是运算符,它是关键字,例如moduleor case,所以我认为您只能使用括号更改优先级。

在此处查看更多信息: https: //wiki.haskell.org/Keywords#.7E