更改记录值 - haskell

Nah*_*ahu 1 haskell record

我有这个记录:

data Ship = CShip {Planet::String}
    deriving Show
spaceship = CShip {Planet = "alphaCentauriBb"} 
Run Code Online (Sandbox Code Playgroud)

但我想改变星球上的字符串。例如:

Planet = "alphaCentauriCc"
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

chi*_*chi 7

您可以使用记录更新语法来更新字段的值。这将创建一个新的记录值,其字段值与旧的字段值相同,但更新的字段除外。

newSpaceship = spaceship {planet = "alphaCentauriCc"} 
Run Code Online (Sandbox Code Playgroud)

请注意,字段名称必须小写。

  • @Nahu:所有变量在 Haskell 中都是不可变的,所以*是*。您可以使用“IORef”来引用某些内容,并使用“IO”将对象更新为它所引用的内容。但 *reference* 仍然是不可变的,并且使用 IO 会使它包装的变量可变,这可能不是一个好主意。 (3认同)