以下代码段编译:
{-# LANGUAGE TypeFamilies #-}
type family Foo a b
f :: (Foo a b ~ Int) => a -> b -> b
f = error ""
但中缀类型运算符的行为似乎有所不同:{-# LANGUAGE TypeFamilies #-}
type family a \\ b
f :: (a \\ b ~ Int) => a -> b -> b
f = error ""
GHC 提示 \\
的第二个参数应该有种*
, 但是 b ~ Int
有样Constraint
.当然这可以用括号来解决,但我想知道是否有另一种方法。我尝试使用固定声明
infixl 9 \\
设置运算符的优先级,但这并不能解决问题,表明 ~
的优先级是 at least 9 (如果我解释正确的话)。我尝试使用 this answer 中的技巧让 GHCi 告诉我 ~
的优先级,但它没有用。从技术上讲,
~
可能不是类型运算符,它更像是一个类似于 ,
的词法结构,但问题仍然存在:~
绑得这么紧? (注意:This question 询问类型函数的优先级,但没有说明
~
。)
最佳答案
~
不是运算符,而是关键字,例如 module
或 case
,所以我认为您只能使用括号更改优先级。
在此处查看更多信息:https://wiki.haskell.org/Keywords#.7E
关于haskell - 〜的优先级是什么,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28257511/