我正在运行 PAKCS Curry 编译器,版本 3.3.0。
考虑这个取自 Curry 教程的非确定性函数:
data Person = Joan | Luc | Richard
data Day = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday
oncall :: Person -> Day
oncall Joan = Monday
oncall Joan = Wednesday
oncall Richard = Monday
oncall Luc = Tuesday
当我编译它时,我看到了这个警告:
foo.curry:6:1-9:20 Warning:
Function `oncall' is potentially non-deterministic due to overlapping rules
|
6 | oncall Joan = Monday
| ^^^^^^^^^^^^^^^^^^^^...
如果我错误地编写了一个非确定性函数,警告可能会有所帮助。另一方面,如果我故意编写了一个非确定性函数,那么警告就会很烦人,如果我编写一个包含许多此类函数的大型程序,那么我最终可能会收到很多警告。
有什么方法可以将函数标记为故意不确定的,所以警告会消失吗?
我在 PAKCS 手册中看到我可以通过以下方式关闭所有此类警告
{-# OPTIONS_FRONTEND -Wno-overlapping #-}
但这似乎不是一个好主意,因为如果我偶然编写了一个非确定性函数,这个警告似乎很有用。