问题标签 [non-exhaustive-patterns]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
6792 浏览

haskell - 当我调用 Haskell 子字符串函数时,为什么会出现“函数中的非详尽模式......”?

我正在阅读《The Haskell Road to Logic, Maths and Programming 》一书。(我只是第 1 章的中途,但到目前为止我很享受它并打算继续。)我已经阅读了第 1.5 节“玩 Haskell 游戏”,其中“包含许多进一步的示例让你熟悉 [Haskell]”。到目前为止,我已经了解了函数、类型声明、受保护的方程式、一些关于列表模式匹配以及 where & let 的知识。

我坚持练习 1.17,它要求我们编写一个函数 substring :: String -> String -> Bool 其中:

  1. 如果 xs 是 ys 的前缀,xs 是 ys 的子串
  2. 如果 ys 等于 y:ys' 并且 xs 是 ys' 的子串,则 xs 是 ys 的子串
  3. 没有别的是 ys 的子串

我使用了前面示例中提供的前缀函数:

然后尝试:

...可能还有其他的排列方式。

当我运行时,substring "abc" "xxxabcyyy"我得到True,但是当我运行时,substring "abc" "xxxabyyy"我得到“*** Exception: substring.hs:(3,0)-(5,45): Non-exhaustive patterns in function substring”。我不知道为什么。我不明白当我使用“否则”时怎么会有非详尽的模式。

顺便说一句,这本书还没有涵盖 if-then-else。现在,我宁愿将其排除在我的解决方案之外。

0 投票
2 回答
8244 浏览

haskell - 在 Haskell 中,为什么非穷举模式不是编译时错误?

这是我调用 Haskell 子字符串函数时为什么会出现“函数中的非详尽模式...”的后续内容?

我知道使用-Wall, GHC 可以警告非详尽的模式。我想知道默认情况下不使其成为编译时错误的原因是什么,因为始终可以显式定义部分函数:

这个问题不是特定于 GHC 的。

是不是因为...

  • 没有人想强制 Haskell 编译器执行这种分析?
  • 非详尽的模式搜索可以找到一些但不是所有的情况?
  • 部分定义的函数被认为是合法的,并且经常使用到不会强加上面显示的那种构造?如果是这种情况,您能否向我解释为什么非详尽的模式是有帮助/合法的?
0 投票
3 回答
293 浏览

haskell - 基本 Haskell 函数中的非穷举错误

我是 Haskell 的新手,并试图组合一个简单的函数来检查两个数字是否相等。这可以编译,但是当我尝试对该程序进行测试时,它说这不是详尽的。我不明白布尔函数如何不详尽?提前致谢:

0 投票
2 回答
65748 浏览

haskell - 功能中的非详尽模式

我的这段代码有问题,它应该计算字符串中同一字母的最长子字符串,但是有一个错误:

我知道这是错误类型的问题,但我不知道错误在哪里,或者如何查找或调试它

0 投票
1 回答
5251 浏览

list - Haskell - 非详尽模式以防万一

我有以下代码:

它编译得很好,但是当我运行程序时,它给出了以下错误:

Melon.hs:(172,10)-(182,74):非穷举模式以防万一

其中表示行的数字是从“= case F' (pc : pcs) (readC pc core) core of”到“in FAll core' ((name, pcs') : acc) ps”

我认为问题在于用尽 (pc : pcs) 的模式,但我无法理解如何解决它。

任何帮助,将不胜感激。

代码已更新为:

我写了以下内容:

但是程序只是陷入了无限循环:S

0 投票
2 回答
1476 浏览

scala - 如何在 Scala 中系统地避免不安全的模式匹配?

考虑以下损坏的功能:

在这里,该函数应该与 a 一起使用List[Int],但被重构为接受Seq[Int],因此在编译器没有注意到的情况下被破坏。

Scala 不完整的模式匹配检测中的这个巨大漏洞使它几乎毫无用处。

我想有一种系统地检测这些问题的方法。具体来说,我希望编译器在每个instanceof-guided 模式匹配上发出错误/警告,即我只想允许在密封层次结构和自定义匹配器上进行模式匹配。

是否存在用于对模式匹配安全性进行保守(而不是任意)检查的编译器选项/插件?

0 投票
3 回答
2166 浏览

haskell - 为什么 GHC 抱怨非详尽的模式?

当我用 GHC 编译以下代码时(使用-Wall标志):

GHC 抱怨模式匹配insert并不详尽:

为什么 GHC 会发出此警告?很明显,GHC 抱怨的模式是在insert x (Node a left right).

0 投票
1 回答
812 浏览

haskell - 在 GHCI 中禁用“非详尽模式以防万一”

我正在阅读论文“Monad Transformers Step by Step”并通过示例进行操作。

eval0示例中,表达式中有一个有意的非穷举模式case

有什么方法可以在不添加“情况下的非详尽模式”的情况下抑制异常

到最后case?本文后面的示例展示了如何使用ErrorTmonad 转换器来处理这种情况。

0 投票
2 回答
1662 浏览

scala - 为什么 Scala 2.10 在匹配单例类型时会给出“匹配可能并不详尽”的警告?

在 Scala 2.10.0-M4 中

给出:

这个对吗?当然,比赛实际上是详尽无遗的。

(同时,回到 Scala 2.9.X 我们得到

这大概是一个错误。)

0 投票
2 回答
461 浏览

haskell - Haskell:函数中的非穷举模式(简单函数)

我很困惑为什么这个函数的第一个和第三个版本会给出这个错误,而第二个定义工作正常。

提前致谢