我有以下定义
data AST
= Number Integer
| Identifier String
| String String
-- | Operation BinOp AST AST
| Query String
deriving (Show, Eq)
data Tuple = Tuple {cmd :: String,
cid :: AST,
argumentList :: [AST],
queryList :: [AST]} deriving (Show, Eq)
当我尝试打印例如cid时,我收到错误
No instance for (Show (Tuple -> AST)) arising from a use of `print'
这令我感到惊讶,因为AST和Tuple都是show class的成员。如何使cid,argumentList和queryList可打印?
答案 0 :(得分:5)
cid
只是一个用于访问元组“cid”字段的函数。打印它是不可能的,因为打印fst
是不可能的。但是,这是正确的:
t :: Tuple
t = ...
main = print (cid t)
答案 1 :(得分:4)
您无法打印cid
。
您可打印cid tuple
,其中tuple
的值为Tuple
。
您的错误消息
No instance for (Show (Tuple -> AST)) arising from a use of `print'
表示您正在尝试打印Tuple -> AST
类型的值。无法打印功能。