使用 'case' 而不是 Signal.Address 操作

Use 'case' over Signal.Address Action

我有以下类型的操作:

type Action = ActionA A.SubAction | ActionB B.SubAction

其中 A 和 B 是两个不同的类型,每个都持有一个 SubAction 类型。

我想实现一个方法,使用'case'根据地址参数的类型执行操作。

view : Signal.Address Action -> Html
view address =
    case address of
        Signal.Address (ActionA action_a) ->
            ...
        Signal.Address (ActionB action_a) ->
            ...

不幸的是,我收到以下错误:

Cannot find pattern `Signal.Address`.
The qualifier `Signal` is not in scope.

谁能帮我看看我做错了什么?

您将无法使用 case 语句从地址参数中提取 Actionsignature of Address

type Address a =
    Address (a -> Task () ())

如果您的 view 函数需要知道最后执行了哪个操作,您最好在 Model 上添加一个 lastAction : Action 字段,然后在 update.