Elm 如何初始化类型别名?

Elm 如何初始化类型别名?,elm,Elm,如何在Elm中初始化类型别名 模型如下 type alias Model = { name : String , tags : List Tag , token : Token , jwt : String } type alias Token = { accessToken : String } 令牌在下面 type alias Model = { name : String , tags : List Tag

如何在Elm中初始化类型别名

模型如下

type alias Model =
    { name : String
    , tags : List Tag
    , token : Token
    , jwt : String 
    }
type alias Token =
    { accessToken : String
    }
令牌在下面

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函数中初始化自定义类型


有人知道怎么做吗?

初始化类型别名有两个选项。第一个,就像在使用模型时一样,是将别名视为构造函数。要内联执行此操作,需要将其括在括号中:

Model "" [] (Token "") ""
您也可以采用这种方法,但在单独的行中初始化它:

let
    initialToken =
        Token ""
in
Model "" [] initialToken ""
如果有一个一般可用的initialToken很有用,就像有一个init版本的模型很有用一样,那么您可能希望它成为从模块导出的顶级声明,而不是将其隐藏在let中。或者,将令牌作为自己的模块,并具有自己的init,这可能是有意义的

第二个选项是直接构造类型而不使用别名。在这种情况下,这意味着创建一个带有accessToken字段的记录:


初始化类型别名有两个选项。第一个,就像在使用模型时一样,是将别名视为构造函数。要内联执行此操作,需要将其括在括号中:

Model "" [] (Token "") ""
您也可以采用这种方法,但在单独的行中初始化它:

let
    initialToken =
        Token ""
in
Model "" [] initialToken ""
如果有一个一般可用的initialToken很有用,就像有一个init版本的模型很有用一样,那么您可能希望它成为从模块导出的顶级声明,而不是将其隐藏在let中。或者,将令牌作为自己的模块,并具有自己的init,这可能是有意义的

第二个选项是直接构造类型而不使用别名。在这种情况下,这意味着创建一个带有accessToken字段的记录:


Model[]代币不起作用?哇,它起作用了,完全有道理!非常感谢你!!Model[]代币不起作用?哇,它起作用了,完全有道理!非常感谢你!!如何实例化类型别名Example={}?我知道这应该是本例中的一种类型。但对于创建程序的框架来说,它可能是有用的。我认为示例可能有效,但似乎无效。您可以通过示例或{}引用该类型。由于记录中没有字段,因此示例构造函数没有参数。是的,谢谢,我意识到这是一个相当愚蠢的评论。然而,我最初认为您必须始终向构造函数传递一个值。干杯如何实例化类型别名Example={}?我知道这应该是本例中的一种类型。但对于创建程序的框架来说,它可能是有用的。我认为示例可能有效,但似乎无效。您可以通过示例或{}引用该类型。由于记录中没有字段,因此示例构造函数没有参数。是的,谢谢,我意识到这是一个相当愚蠢的评论。然而,我最初认为您必须始终向构造函数传递一个值。干杯