在Haskell中交织函数定义

gof*_*rie 1 haskell

我正在编写一些相互递归的模式匹配函数,我希望能够将它们的定义交错

recA [pattern ...] = [.. something that might call recB with the next pattern ..]
recB [pattern ...] = ...
recA [other ...]   = ...
...b
Run Code Online (Sandbox Code Playgroud)

这可能吗?还有一些更惯用的选择吗?

yat*_*975 6

哈斯克尔2010年报告,部分4.4.3.1 功能绑定说,

请注意,定义函数的所有子句必须是连续的,并且每个子句中的模式数必须相同.

所以你不能交错recA,并recB在您的例子.

没有理论上的理由(我可以看到)为什么编译器不能将各个子句组合在一起; 我怀疑这条规则是为了防范人为错误和混乱而引入的.作为一个愚蠢的例子,以下是什么问题?

function1 [] = "a"
functionl (x:xs) = "b"
function1 (x:y:xs) = "c"
Run Code Online (Sandbox Code Playgroud)