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/