2

我有以下定义

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 类的成员。如何使 cid、argumentList 和 queryList 可打印?

4

2 回答 2

5

cid只是一个用于访问元组的“cid”字段的函数。打印它是不可能的,就像打印它是不可能的一样fst。但是,这是正确的:

t :: Tuple
t = ...

main = print (cid t)
于 2012-12-18T22:39:27.210 回答
4

你不能打印cid

可以打印cid tuple,其中tuple是类型的值Tuple

你的错误信息

No instance for (Show (Tuple -> AST)) arising from a use of `print'

表示您正在尝试打印 type 的值Tuple -> AST。无法打印功能。

于 2012-12-18T22:39:06.943 回答