我认为这主要是为了保持一致性,以便可以以相同的方式读取所有子句;可以这么说。也就是说,每个RHS在功能类型中都位于相同的位置。如果您允许的话,我认为也会掩盖很多愚蠢的错误。还有一个语义上的怪癖:说编译器填充了这些子句,使其具有与其他子句相同数量的模式;即你的例子将成为safeDivide x 0 = xsafeDivide x y = (/) x y现在考虑第二行是否改为safeDivide = undefined;在没有上一个子句的情况下,safeDivide它将是⊥,但是由于此处执行了eta扩展,所以它是\x y -> if y == 0 then x else ⊥-因此safeDivide = undefined实际上并没有定义safeDivide为⊥!国际海事组织,这似乎足以使人们有理由禁止此类条款。