如果我用10替换5 + 5,代码将按预期工作。这里有什么问题?我可以在模式中使用+运算符吗?它被认为是n + k模式吗?我知道Haskell 2010上不允许这些,所以这可能是问题所在。
感谢。
答案 0 :(得分:4)
是的,这是真的。通常,Haskell中的有效模式应该只包含您绑定的构造函数,文字和变量,而不仅仅包含任何函数。 (Haskell/Pattern matching)
(+)
是一个函数,因此包含它的模式不应该是有效的。所谓的" n + k模式"事实上,它是作为一种语法糖引入的(参见Wikipedia's entry on Haskell 2010)。除此之外,作为模式的(5+5:x:xs)
应与[x, y, z] ++ xs
一样无效。
为了得到我自己的两分钱,这可能是为什么它不被允许的另一个原因,即使有两个文字是(+)
的操作数。如果5+5
模式要通过编译器,Haskell允许您执行此操作:
foo x = let 5 + 5 = 11 in (\(5+5:xs) -> x ++ xs)
现在在编译时就明白了5 + 5 = 10
?
答案 1 :(得分:1)
根据https://www.haskell.org/definition/haskell98-report.pdf中的3.17.1,模式语法只允许var + integer
,因此5+5
也不应该是Haskell 98中的合法模式。