data Nat = Zero | Succ Nat
data NatSig val = NatSig {zero_ :: val, succ :: val -> val}
foldNat :: NatSig val -> Nat -> val
foldNat alg = \case Zero -> zero_ alg
Succ n -> succ alg $ foldNat alg sn
您好,这是我大学的代码,但是如果我要运行它,则会出现错误
Illegal lambda-case (use -XLambdaCase)
一些一个知道为什么吗?
\case
不在Haskell报表中,因此标准的Haskell不允许使用。要使用它,您必须启用LambdaCase
扩展名。您可以通过几种不同的方法来这样做,包括:-XLambdaCase
{-# LANGUAGE LambdaCase #-}
放在文件顶部:set -XLambdaCase
case
进行模式匹配的方法,因此您的错误消息是msg。您可以使用lambda并将其与case
结合使用,例如:foldNat = \alg -> { case alg of
Zero -> zero_ alg
Succ n -> succ alg $ foldNat alg sn
}
或带有等式和模式匹配:
foldNat Zero = zero_ alg foldNat (Succ n) = succ alg $ foldNat alg sn
或使用@Josheph使用的正确扩展名>>
{-# LANGUAGE LambdaCase #-}