假设我有一个数据类型
data Foo = Foo String Bool | Bar (String->Bool)
我想要一个函数f:
f (Foo _ _) = [String, Bool]
f (Bar _) = [String->Bool]
特别是,我希望这个函数神奇地知道Foo和Boo是构造函数,而不是给我任何一个
f (Foo _ _) = [String -> Bool] -- #Don't want this!!!!
f (Boo _) = [String, Bool] -- #Don't want this!!!!
我该怎么做?我知道我可以使用Data.Data打印ADT记录列表,但我无法弄清楚如何打印类型名称列表。
(如果这是不可能的,我会选择一个函数f',它接受ADT并输出它是否有0个参数。
f'(Foo _ _) = False
f'(Bar _) = False
即使我没有将记录分配给AD操作,我也希望这个能够工作。)