使用部分定义或默认值定义“类型别名”

时间:2018-09-30 02:15:07

标签: record elm row-polymorphism

是否有办法将其干燥?

我不想重复LoadObjectAsynccontents : List Nav

wrapperId : String

1 个答案:

答案 0 :(得分:2)

是的!您可以将公共字段移动到单独的记录中,并向其中添加行变量。然后可以在以后提供指定剩余字段的行变量a

type alias CommonModel a =
    { a
        | contents : List Nav
        , wrapperId : String
    }


type alias InputModel =
    CommonModel
        { containerClassName : Maybe String }


type alias Model =
    CommonModel
        { containerClassName : String }

您还可以使用行变量来编写接受具有公共字段的任何记录的函数。例如

getWrappedId : CommonModel a -> String
getWrapperId { wrapperId } = wrappedId

将同时接受InputModelModel,或接受至少包含CommonModel指定的字段的任何其他记录。像任何其他类型变量一样,将推断行变量。