我们有一个非常简单的模型:
Station
至少有一个Train
Train
至少有两个Station
s
模型必须允许检查任何列车访问的车站,并检查哪些列车访问特定车站。
如何在Haskell中对其进行建模?
我是Haskell的新手,所以请纠正我:一旦创建了一个对象,你就无法修改它 - 你只能根据那个创建一个新对象(〜不变性)。我对吗?如果是这样, 我将不得不使用半初始化对象创建大量临时变量(在反序列化期间甚至在单元测试期间)。
基本上我需要的是在Haskell中建模域类的一个例子 - 在阅读“了解你一个haskell ......”后,我仍然不知道如何使用这种语言。
答案 0 :(得分:4)
这是一种天真的方法:
data Station = Station Train [Train]
data Train = Train Station Station [Station]
您永远不必创建未初始化的对象。例如,这里有几个示例值:
grandCentral = Station regional [national]
bestWestern = Station regional [national]
regional = Train grandCentral bestWestern []
national = Train grandCentral bestWestern []
然而,这种方法存在很多缺点;从Haskell的纯子集中观察堆内循环是不可能的,因此更新或使用这些数据是很棘手的。通常的解决方法是明确地为指针建模。
type TrainMap = Map TrainId Train
type StationMap = Map StationId Station
type TrainId = Int -- use newtype for more compiler checks at
type StationId = Int -- the cost of more programmer annoyance
data Train = Train StationId StationId [StationId]
data Station = Station TrainId [TrainId]