如何制作代数数据类型列表

HHC*_*HHC 0 haskell

嗨我现在正试图在前奏中使用elem函数.

data MyType = A Int
            | B Int Int
            | C Int
            | D Int Int
     deriving (Show,Eq)

list = [ A _, B _ _ ]    
Run Code Online (Sandbox Code Playgroud)

要么

list = [ A Int, B Int Int ]

bool = (A 12) elem list  -- use like this to get a Boolean value.
Run Code Online (Sandbox Code Playgroud)

问题是列表,它会(都)有编译错误.有人能告诉我正确的方法来定义列表吗?

关于数据和在我的主代码中导出(Show,Eq)我已经做了所有这些.这个问题的原因是我有一个很大的MyType列表,我想从大清单中选择一两种类型修改它然后把它放回去,我该怎么做?进出口.bigList = [A 3,C 6,A 5,B 5 8,D 5 6]我想只选出数据类型(A Int)和(B Int Int),也许改变两种数据类型的所有值进入0后,修改后放回去,所以我最终得到一个新列表.newBigList = [A 0,C 6,A 0,B 0 0,D 5 6]

谢谢

Ric*_* T. 7

首先,它是,data而不是Data.其次,您将类型变量(Int)与定义中的值混合list,而_只能用于模式匹配.您应该编写此代码来构建类型列表[MyType]:

list = [A 12, B 1 5]
Run Code Online (Sandbox Code Playgroud)

三,你的申报bool用途elem :: Eq a => a -> [a] -> Bool为中缀运算符,而它是一个像任何其他功能.写任何一个

bool = elem (A 12) list
Run Code Online (Sandbox Code Playgroud)

要么

bool = (A 12) `elem` list
Run Code Online (Sandbox Code Playgroud)

从类型签名中可以看出elem,您需要派生Eq类型类.能够打印您的MyType值也很有用,因此您可以考虑deriving (Eq,Show)在类型声明的末尾添加.

看起来你错误地将Haskell误认为是Prolog.Haskell不像Prolog那样统一工作.你应该从基础知识开始阅读一本好的教程或书.