通用数据结构上的 Elm 模式匹配



给定此代码:

type Msg 
    = NoOp
    | UpdateField ReqRes

type ReqRes a
    = Request a
    | Response (Result Http.Error Bool)

update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
    case msg of
        UpdateField reqres ->
            case reqres of
                Request a ->
                    -- Do stuff
                Response result ->
                    -- Do stuff
        _ -> 
            -- Do stuff

所以正如你所看到的,我有一个名为UpdateField的消息,它采用UnionType ReqRes。目前为止,一切都好。但是联合类型具有通用数据结构(或包含类型变量...这两者的意思是一样的吗???(。

我的问题是现在,我不知道如何对此进行模式匹配。

编译器告诉我这个错误:

。此模式匹配中的问题

模式匹配类型的东西:

ReqRes a

但它实际上将尝试在此处匹配的值是:

ReqRes

如果你在type ... =type alias ... =后面有一个类型变量(a(,它也应该出现在左侧。

同样,如果存在类型 ReqRes a ,则应始终使用该a 查看。

因此,以下是代码正常工作所需的更改:

type Msg 
    = NoOp
    | UpdateField ReqRes
... becomes...
type Msg a
    = NoOp
    | UpdateField (ReqRes a)

update : Msg -> Model -> (Model, Cmd Msg)
... becomes...
update : Msg a -> Model -> (Model, Cmd (Msg a))

最新更新