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

问题描述 投票:1回答:2
 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)

一些一个知道为什么吗?

haskell
2个回答
0
投票
语法\case不在Haskell报表中,因此标准的Haskell不允许使用。要使用它,您必须启用LambdaCase扩展名。您可以通过几种不同的方法来这样做,包括:

    在命令行上输入-XLambdaCase
  1. {-# LANGUAGE LambdaCase #-}放在文件顶部
  2. 在GHCi提示符下运行:set -XLambdaCase

0
投票
这不是使用lambda的方法,也不是与关键字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 #-}

© www.soinside.com 2019 - 2024. All rights reserved.