Haskell 哈斯凯尔没有找到;间接的;类型
我参加了一个编译器课程,我决定在haskell中学习,但是我很难设置ast。我的问题是我有一个Haskell 哈斯凯尔没有找到;间接的;类型,haskell,abstract-syntax-tree,Haskell,Abstract Syntax Tree,我参加了一个编译器课程,我决定在haskell中学习,但是我很难设置ast。我的问题是我有一个Atom类和一个Expr类,Expr的一个实例可以是Atom,但是当Expr立即成为一个Atom时,它就有问题了。以下是一个例子: data Atom -- cannot be reduced farther = Const Int -- int is value | Var String -- string is name deriving (Show) -- So we ca
Atom
类和一个Expr
类,Expr
的一个实例可以是Atom
,但是当Expr
立即成为一个Atom时,它就有问题了。以下是一个例子:
data Atom -- cannot be reduced farther
= Const Int -- int is value
| Var String -- string is name
deriving (Show) -- So we can print it
data Expr -- add input and the like
= Add Expr Expr -- add is two exprs
| USub Expr -- negation
| Input -- call to input
| Atomic Atom -- or an atomic
deriving (Show) -- So we can print it
data Statement
= Print Expr
| Discard Expr
| Assign String Expr
deriving (Show) -- So we can print it
main = do
let test5 = Print (Const 2)
putStrLn $ show test5
编译器在
打印(Const 2)
时失败,因为它需要一个Expr。有没有解决这个问题的方法,有没有更好的词汇来表达这个问题?const2
是一个Atom
,但是Print
使用Expr
作为参数。幸运的是,每个Atom
都可以通过Atomic
构造函数生成Expr
。因此:
main = do
let test5 = Print (Atomic (Const 2))
print test5
Const 2
是一个Atom
,但Print
将Expr
作为参数。幸运的是,每个Atom
都可以通过Atomic
构造函数生成Expr
。因此:
main = do
let test5 = Print (Atomic (Const 2))
print test5
Print(原子(常量2))如何?
?可以方便地定义IsString Atom
和Num Atom
实例(第二个实例仅在Const
情况下工作)。然后,Print(Atomic 2)
会起作用,而Print(Atomic“hi”)
@BenjaminHodgson也会起作用。想问一下,这样我就可以接受它并给你信任了吗?Print(Atomic(Const 2))
?定义IsString-Atom
和Num-Atom
实例可能很方便(第二个只在Const
情况下工作)。然后,Print(Atomic 2)
会起作用,而Print(Atomic“hi”)
@BenjaminHodgson也会起作用。想问一下,这样我就可以接受它并给你信用?