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

时间:2017-05-07 20:47:57

标签: generics pattern-matching 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。到现在为止还挺好。但是Union Type有一个通用数据结构(或者包含一个Type变量......这两个意思是一样的吗???)。

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

编译器告诉我这个错误:

  

...此模式匹配中的问题

     

模式匹配类型:

ReqRes a
     

但它实际上要在这里匹配的值是:

ReqRes

1 个答案:

答案 0 :(得分:1)

如果您在type ... =type alias ... =后面有一个类型变量(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))

fscanf(result_search_cd,"\n");