Haskell 联合类型中的下一个状态 (*)

Next state (*) in Haskell union types

如何将其从 F# 转换为 Haskell?

type Exit =
    | PassableExit of string * destination: RoomId
    | LockedExit of string * key: Item * next: Exit 
    | NoExit of string option

完整代码: https://github.com/thedevaspect/aspect-fsharp/blob/master/Game.fs

翻译为

data Exit
   = PassableExit String RoomId
   | LockedExit String Item Exit
   | NoExit (Maybe String)

如果您也想要 labels/accessors:

data Exit
   = PassableExit { info :: String, destination :: RoomId }
   | LockedExit { info :: String, key :: Item, next :: Exit }
   | NoExit { infoOption :: Maybe String }

当然 F# 使用元组,所以这会更直接(虽然不是 惯用语):

data Exit
   = PassableExit (String, RoomId)
   | LockedExit (String, Item, Exit)
   | NoExit (Maybe String)