Haskell,堆栈构建工具。

我有代码:

quote :: Char
quote = '\''

doubleQuote :: Char
doubleQuote = '\"'

isBorder :: Char -> Bool
isBorder quote = True
isBorder doubleQuote = True
isBorder _ = False

它将毫无错误地进行编译,但是在编译过程中会看到以下消息:



这是什么意思?我看不到冗余...

最佳答案

声明函数时,参数变量是新名称。您的quote和doubleQuote隐藏了函数,而不是调用用于模式匹配的函数。这样,模式匹配的语言就与右侧表达的语言有所不同。要实现您想要的目标,要么

isBorder :: Char -> Bool
isBorder '\'' = True
isBorder '\"' = True
isBorder _ = False

或者
isBorder :: Char -> Bool
isBorder c | quote == c = True
isBorder c | doubleQuote == c = True
isBorder _ = False

其原理是首先将参数绑定(bind)到名称,然后使用防护来调用计算结果为 bool 值的表达式。

关于haskell - 模式匹配是多余的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39862667/

10-11 04:22