问候,我是Haskell的新手,我已经陷入了为作业定义数据类型的困境。
我需要创建“策略”类型,它基本上是一个包含1-6个字符的字符串,每个字符代表一个数字值,我必须将大于9的值表示为一个字母(最多35个不同的值),我试过了定义一个表示每个可能值的辅助类型,并使用它来创建我的类型,但我的代码不起作用,我已经没有想法了。这是我一直在尝试的定义:
data Value = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | 'A' | 'B' |
'C' | 'D' | 'E' | 'F' | 'G' | 'I' |'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' |
'Q' |'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'Y' | 'X' | 'Z'
data Strategy = Value | Value:Value | Value:Value:Value |
Value:Value:Value:Value | Value:Value:Value:Value:Value |
Value:Value:Value:Value:Value:Value
值类型不接受数字,策略类型“排序”一直到第二个构造函数,然后它就会破灭。谢谢你的帮助!
答案 0 :(得分:6)
就像您之前(已删除)的问题一样,这看起来很像家庭作业。如果您选择真实姓名而不使用此丢弃帐户,这也会有所帮助。
This page告诉您如何使用haskell的data
类型声明。你在做什么不同/错?
您为Value
使用字符而不是构造函数。 '1'
'2'
等都是字符,您需要一个构造函数以及零个或多个字段,如ValueCon1 Char
和ValueCon2 String
您正在使用列表构造函数,我假设的是Value
的字段,而不是为Strategy
定义任何新的构造函数。也许你想要data Strategy = Strat [Value]
,它会接受任何大小的列表。虽然更痛苦,但您可以定义许多具有有限数量的单独Value
字段的策略构造函数。
答案 1 :(得分:1)
type Strategy = [Char]
^^我实际上是怎么做的。
或者,也许
newtype Strategy = Strategy [Char]
这不太原则,因为你有义务不填写废话。使用newtype解决方案,您可以使用“智能构造函数”并说,例如
mkStrategy :: [Char] -> Strategy
mkStrategy x
| {- list is valid -} = Strategy x
| otherwise = error "you gave me a bad strategy!"
在实际代码中,你不想抛出错误,但返回一个选项类型,但这是另一个故事......