如何在Elm中初始化类型别名?
模型在下面。
type alias Model =
{ name : String
, tags : List Tag
, token : Token
, jwt : String
}
令牌在下面。
type alias Token =
{ accessToken : String
}
我尝试如下进行初始化。
init : String -> ( Model, Cmd Msg )
init flags =
( Model "" [] "" "", Cmd.none )
但是,会发生类似
的错误The 3rd argument to `Model` is not what I expect:
55| ( Model "" [] "" "", Cmd.none )
^^
This argument is a string of type:
String
But `Model` needs the 3rd argument to be:
Token
我知道第三个参数不是字符串。 但是,我只是不知道如何在init函数中初始化自定义类型。
有人知道怎么做吗?
答案 0 :(得分:5)
您有两个选择来初始化类型别名。首先,就像在与Model
一起使用时一样,是将别名视为构造函数。要进行此内联,您需要将其用括号括起来:
Model "" [] (Token "") ""
您也可以采用这种方法,但在单独的行中对其进行初始化:
let
initialToken =
Token ""
in
Model "" [] initialToken ""
如果通常可以使用initialToken
(例如,将init
的版本为Model
很有用),那么您可能希望将其作为顶层声明从模块中导出,而不是将其隐藏在let
中。或者,Token
可以成为自己的模块,而自己的init
可以公开。
第二个选择是直接构造类型而不使用别名。在这种情况下,这意味着创建带有accessToken
字段的记录:
Model "" [] { accessToken = "" } ""