[英]Creating a list of type instances in Haskell
我正在学习 haskell 并想创建一个列表来保存这个(枚举器?)数据。 我不确定您是否可以这样做,或者最好创建自定义类型的单独实例。 第一个是我刚刚开始工作。 第二个版本是我想如何持有它的一个例子。 不过,我无法想象我可以像这样轻松地访问数据; 你们建议我做什么?
声明一个数据类型以保存有关位置的几条信息并尝试创建这些类型的列表:
这是我现在的做法:
data Place = Place {location :: String, degreesNorth :: Float, degreesEast:: Float, rainFall :: [Int]} deriving (Show)
london = Place {location="London", degreesNorth=51.5, degreesEast=(-0.1), rainFall=[0, 0, 3, 5, 8, 3, 0]}
cardiff = Place {location="cardiff", degreesNorth=12.5, degreesEast=(-4.1), rainFall=[90, 123, 3, 5, 8, 3, 0]}
首先,您不能在文件中定义两个常量testData
。 因此,您可以例如将一个定义为testDatum
,将另一个定义为testData
。
其次,数据构造函数Place
不接受列表,您应该在参数上调用它,并将Place
(或多个位置)包装在列表中,因此:
testDatum :: Place
testDatum = Place "London" 51.5 (-0.1) [0, 0, 5, 8, 8, 0, 0]
testData :: [Place]
testData = [
Place "London" 51.5 (-0.1) [0, 0, 5, 8, 8, 0, 0]
, Place "Cardiff" 51.5 (-0.4) [0, 0, 3, 4, 6, 2, 0]
]
正如@RobinZigmond 所说,您最好在此处使用记录类型来命名参数:
data Place = Place
{ location :: String
, latitude :: Float
, longitude :: Float
, rainfall :: [Int]
}
这将自动生成诸如location:: Place -> String
之类的 getter,并使更新一个字段更方便。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.