我的表演课去了哪里

时间:2012-12-18 22:34:36

标签: haskell

我有以下定义

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可打印?

2 个答案:

答案 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类型的值。无法打印功能。