使用单个构造函数联合类型

时间:2017-06-08 18:52:24

标签: elm

在Elm中,我有时会发现自己通过使用只有一个构造函数的union类型来定义记录类型。然后我使用只有一个案例的case语句来解压缩记录字段:

type Model =
    Model { stack: List Int }

update msg model =
    case model of
        Model { stack } ->
            ...

有没有更短的解压方法?单个案例看起来有点愚蠢。它会导致不必要的缩进和冗长。

另外:我在处理程序中的中央数据结构时使用type而不是type alias更明确地说明了这一点(通常只有少数字段并且只能用于程序中很少有地方,所以额外的冗长不是 很多问题)。放弃这种方法并尽可能使用类型别名来记录是不是更好的风格?

1 个答案:

答案 0 :(得分:4)

您可以在函数签名中进行模式匹配:

update msg (Model model) =
    model.stack ...

或者,如果您想直接使用stack

update msg (Model { stack }) =
    ...

至于你是否应做这类事情?我曾经在明确尝试隐藏模型中的实现细节时使用过它。你只需要愿意处理它不可避免地引入的额外冗长。你真的需要决定是否有必要。除非有明确的需要,否则我可能会倾向于避免它。