2014-09-03 47 views
4

我有我自己的数据类型,指出:哈斯克尔不在范围内:类型构造函数或类`PushInt”

data Commands = MoveLeft | 
       MoveRight | 
       MoveUp | 
       MoveDown | 
       IfVertical | 
       IfHorizontal | 
       InputChar | 
       InputInt | 
       OutputChar | 
       OutputInt | 
       OutputNewline | 
       PushInt Int | 
       Add | 
       Sub | 
       Mult | 
       Div | 
       Exp | 
       Pop | 
       Dup | 
       Switch | 
       Noop | 
       End 
       deriving (Show, Eq) 

,我有一个功能,与我试图从PushInt提取数搭配:

extractNum :: PushInt -> Int 
extractNum (PushInt n) = n 

但是当我尝试运行此,我得到一个错误,指出:

Parser.hs:32:19: 
    Not in scope: type constructor or class `PushInt' 
    A data constructor of that name is in scope; did you mean -XDataKinds? 

至于我知道我是允许使用此方法从数据中提取字段。我很确定这只是一个非常简单的错误,但任何帮助表示赞赏。

回答

9

哇,是我对一个凌晨2点的错误。功能

extractNum :: PushInt -> Int 
extractNum (PushInt n) = n 

应该

extractNum :: Commands -> Int 
extractNum (PushInt n) = n