给定此代码:
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))