gpt4 book ai didi

elm - 在 Elm 中,有没有办法合并联合类型? (出于模块化目的)

转载 作者:行者123 更新时间:2023-12-04 14:22:23 27 4
gpt4 key购买 nike

从这三个声明开始:

type SharedMsg
= SharedAction

type Page1Msg
= Page1Action

type Page2Msg
= Page2Action

我有办法获得与以下等效的方法吗?喜欢“合并”联合类型的方法吗?
type Msg
= SharedAction
| Page1Action
| Page2Action

==============================

上下文:我将 Elm 应用程序拆分为每页一个模块,每个模块都有自己的文件夹。

一些操作将被共享,而一些操作将是特定于页面的。

如果我要使用 Html.map方法,我觉得我必须重写页面在它自己的 PageMsg 中使用的每个共享操作消息类型:
type Page1Msg
= Page1Action
| SharedAction

type Msg
= Page1Msg Page1Msg
| Page2Msg Page2Msg

view : Model -> Html Msg
view =
Html.map Page1Msg (Page1View.view model)

因此我想使用一个独特的 Msg为所有页面键入类型,但通过在它们自己的文件夹中写入特定于页面的消息来保持模块化,然后以某种方式定义一个唯一的 Msg通过合并它们来输入。

最佳答案

@z5h 的答案几乎是正确的,但类型构造函数必须具有不同的名称。

您无法以您想要的方式合并类型。

至于惯用方式:您可以将拆分类型命名为 Msg ,而不是 Page1Msg .因此,例如:

第1页.榆树:

module Page1 exposing (Msg)

type Msg
= Foo

Page2.elm:
module Page2 exposing (Msg)

type Msg
= Bar

Shared.elm:
module Shared exposing (Msg)

type Msg
= Baz

主榆树:
module Main exposing (..)

import Shared
import Page1
import Page2

type Msg
= SomethingCustom
| SharedMsg Shared.Msg
| Page1Msg Page1.Msg
| Page2Msg Page2.Msg

顺便说一句,请记住,如果您将模块拆分为 Page1.View , Page1.Types等,那么只要暴露的功能不重叠,就可以导入不同的同名模块,即:
import Page1.Types as Page1
import Page1.State as Page1
import Page1.View as Page1
import Page1.Decoders as Page1

关于elm - 在 Elm 中,有没有办法合并联合类型? (出于模块化目的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43912528/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com