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

标签 haskell

以下代码段编译:

{-# 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 告诉我 ~ 的优先级,但它没有用。
从技术上讲,~可能不是类型运算符,它更像是一个类似于 , 的词法结构,但问题仍然存在:
  • 为什么中缀和前缀运算符表现出不同的行为?
  • 为什么~绑得这么紧?
  • 我可以做些什么来让我自己的运算符(operator)绑定(bind)得更紧密吗?

  • (注意:This question 询问类型函数的优先级,但没有说明 ~ 。)

    最佳答案

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

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

    关于haskell - 〜的优先级是什么,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28257511/

    相关文章:

    haskell - 如果两个 monad 转换器属于不同类型,但它们的底层 monad 属于同一类型,是否有原则性的方法来组合它们?

    haskell - 如何以类型编码可能的状态转换?

    haskell - 是否有 Monad 的实例但没有 MonadFix 的实例?

    haskell - 使用 Attoparsec 时输入不完整的问题

    Haskell:为什么 GHC 为 main 方法推断的类型不太完整?

    arrays - 由有界数据类型索引的 Repa 数组?

    haskell - 重复计时功能

    haskell - 我可以从程序中更改堆栈大小限制吗?

    haskell - GHC 7.2.2 没有可用的 ghc-prim -any 版本

    haskell - 在 where 子句中指定函数的类型