Haskell 我的表演课去哪了

Haskell 我的表演课去哪了,haskell,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, argu

我有以下定义

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

您不能打印
cid

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

您的错误消息

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

表示您正试图打印类型为
Tuple->AST
的值。无法打印函数。

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

t :: Tuple
t = ...

main = print (cid t)

有没有办法从argumentList中提取出所有数字成员?你的意思是
[i|Number i@DanielFischer the first.Thx.要了解这一点,我必须查看哪些文档?@JFritsch如果你是指学习列表理解,LYAH中有一个,可以在Haskell报告中找到。