具有相同字段名称的数据类型

时间:2015-08-15 15:32:49

标签: haskell

我在Haskell中制作更大的程序遇到了麻烦,一个问题是当我使用相同或匹配的字段名定义数据类型时出现的模糊错误。

data Board  = Board  { width :: Int, height :: Int }
data Player = Player { strength :: Int, width :: Int, height :: Int }

我很乐意编写小程序但是当我发现这个问题时,我会逃避并绝望。

在其他语言中,我可以这样做:

board.width  = 100;
board.height = 100;

player.width = 5;
player.height = 2;

我发现我可以在每个字段名称前加上类型名称(即boardWith,playerWidth),但这是最好的方法和良好做法吗?我该怎么办?

1 个答案:

答案 0 :(得分:1)

为字段赋予唯一的前缀是一种有效的方法。这是Haskell中一个已知的问题,有几种方法可以解决这个问题。

最复杂的解决方案之一是vinyl,它基本上实现了一个新的记录系统(或几个,取决于你如何看待它) - 允许你在记录之间共享字段,甚至提供一个概念'子类型”。根据您对Haskell的熟悉程度,它可能不一定容易使用。你应该检查一下。