如何在弗雷格的记录中“设置”一个字段?

时间:2014-09-29 17:45:27

标签: frege

假设我有这些记录:

data Group = Group { id :: Id, name :: Name }
derive Show Group

data Game = Game { world :: World, groups :: [Group], random :: FRandom }
derive Show Game

我想在游戏中添加一个新组,但我想避免调用Game构造函数,因为如果稍后我向游戏添加一个字段,我不想更改所有的游戏构造函数调用。 假设我想在游戏实例中添加一个新组。最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

这很容易。

假设:

game = Game { .... }   -- some game
newgroup = Group { .... } -- some new group
你只是说:

game' = game.{groups <- (newgroup:)}

拼写出来:

从游戏构建新游戏,但通过将(newgroup :)函数应用于旧组值来更改组字段。当然,这可以将新群体纳入以前存在的群体的前端,因此它相当于:

ng = newgroup : game.groups
game' = game.{groups = ng}

Marimuthu在这里有一篇很好的博客文章:http://mmhelloworld.github.io/blog/2014/03/15/frege-record-accessors-and-mutators/

您决定不使用Game构造函数是非常明智的。 事实上,在这种情况下我做的是创建一个“默认”值,并使用以下内容从默认值中创建一个新值:

rec.{name = value, another <- function, ...} 

语法。