我Expr
为算术运算上课
class Expr a where
mul :: a -> a -> a
add :: a -> a -> a
lit :: Integer -> a
我想“解析”这样的东西: mul ( add (lit 3) (lit 2)) (lit 4) = (3+2)*4
我有数据类型:
data StackExp = PushI Integer
| PushB Bool
| Add
| Mul
| And
| Or
deriving Show
和
type Program = [StackExp] --i use this type for function of stack calculator later
我的任务是:我需要Expr
为类型创建实例Program
更具体 - 我想做这个转变:
mul ( add (lit 3) (lit 2)) (lit 4)
->>>[PushI 2, PushI 3, Add, PushI 4, Mul]
我有问题,因为我[[StackExp]]
在实例声明的输出中收到。
我的尝试:
instance Expr Program where
lit n = (PushI n):[]
add exp1 exp2 = exp1:(exp2:[Add])
mul exp1 exp2 = exp1:(exp2:[Mul])
我不知道如何将所有子表达式连接到列表中
---------------- 编译器错误看起来像这样------------------------
Couldn't match type `[StackExp]' with `StackExp'
Expected type: StackExp
Actual type: Program
…………