【发布时间】:2021-02-27 22:18:39
【问题描述】:
我正在尝试建立一个数据结构,它是 lambda 演算的扩展,以允许加法和减法。我正在尝试创建一个名为 AE 的结构,它可以将 Lit 作为自身,也可以评估加法和减法。我收到的错误说明如下:
无效的类型签名:Lit :: ...
应该是form variable :: type
Lit :: Int -> AEp>
我对这个数据结构的声明有什么问题?
{-# Language GADTs #-}
data AE where
Lit :: Int -> AE
Add :: Int -> Int -> AE
Sub :: Int -> Int -> AE
deriving (Show)
eval :: AE -> Maybe Int
eval (Lit n) = Just n
eval (Add n1 n2) = n1 + n2
eval (Sub n1 n2) = do
if(n1<n2) then return nothing
else return n1 - n2
【问题讨论】:
-
这个 AST 缺少递归,所以它很弱:一个 AE 只能是一个 int,或者是两个 int 的加减法。例如,你不能代表 1+2+3。
标签: haskell data-structures types