Haskell 案例-为什么我得到非法的lambda表达式

Haskell 案例-为什么我得到非法的lambda表达式,haskell,Haskell,您好,这是我大学的代码,但如果我想运行它,我会得到一个错误 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

您好,这是我大学的代码,但如果我想运行它,我会得到一个错误

 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
一些
知道为什么吗?

语法
\case
不在Haskell报告中,因此标准Haskell中不允许使用。要使用它,必须启用
LambdaCase
扩展。有几种不同的方法可以做到这一点,包括:

  • -XLambdaCase
    放在命令行上
  • {-#LANGUAGE LambdaCase}
    放在文件的顶部
  • 运行
    :在GHCi提示下设置-xlambdase

  • 语法
    \case
    不在Haskell报告中,因此在标准Haskell中不允许使用。要使用它,必须启用
    LambdaCase
    扩展。有几种不同的方法可以做到这一点,包括:

  • -XLambdaCase
    放在命令行上
  • {-#LANGUAGE LambdaCase}
    放在文件的顶部
  • 运行
    :在GHCi提示下设置-xlambdase
  • Illegal lambda-case (use -XLambdaCase)