Определите `псевдоним типа 'с частичным определением или по умолчанию - PullRequest
0 голосов
/ 30 сентября 2018

Есть ли способ высушить это?

Я не хочу повторять contents : List Nav и wrapperId : String

type alias InputModel =
    { contents : List Nav
    , containerClassName : Maybe String
    , wrapperId : String
    }


type alias Model =
    { contents : List Nav
    , containerClassName : String
    , wrapperId : String
    }


modelWithDefaults : InputModel -> Model
modelWithDefaults input =
    { input | containerClassName = withDefault "" input.containerClassName }

1 Ответ

0 голосов
/ 30 сентября 2018

Да, есть!Вы можете переместить общие поля в отдельную запись и добавить в нее переменную строки.Переменная строки 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

будет принимать как InputModel и Model, так и любую другую запись, которая содержит хотя бы поля, указанные в CommonModel.Переменная строки будет выведена, как и любая другая переменная типа.

...