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

时间:2015-01-31 23:00:06

标签: haskell

以下代码段编译:

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

f :: (Foo a b ~ Int) => a -> b -> b
f = error ""

infix 类型的运算符似乎表现不同:

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

f :: (a \\ b ~ Int) => a -> b -> b
f = error ""

GHC抱怨\\的第二个参数应该有*种,但b ~ IntConstraint种。当然这可以用parens修复,但我想知道是否还有另一种方式。

我尝试使用固定性声明infixl 9 \\设置运算符的优先级,但这不能解决问题,表明~的优先级为at least 9(如果我正确地解释了这一点。我尝试使用this answer中的技巧让GHCi告诉我~的优先级,但它不起作用。

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

  1. 为什么中缀和前缀运算符表现出不同的行为?
  2. 为什么~绑得这么紧?
  3. 我能做些什么来让我自己的操作员绑定得更紧?
  4. (注意:This question询问类型函数的优先级,但它没有提及~的任何内容。)

1 个答案:

答案 0 :(得分:1)

~不是运营商,它是关键字,如modulecase,因此我认为您只能使用括号更改优先级。

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