当前位置:  开发笔记 > 编程语言 > 正文

如何"施放"联盟类型榆树

如何解决《如何"施放"联盟类型榆树》经验,为你挑选了1个好方法。

让我们说我有两种类型的别名:

type alias A = {...}
type alias B = {...}

和联合类型

type Content = A | B

和模型类型

type alias Model= {cont : Content, ...}

init : Content -> Model
init cont = {cont = cont, ...}

如何将类型A的记录传递给init.

a : A
a = {...}
init a 

抛出以下错误:

Detected errors in 1 module.
## ERRORS in Main.elm ##########################################################

-- TYPE MISMATCH ------------------------------------------------------ Main.elm

The 1st argument to function `init` has an unexpected type.

78|               init e
                       ^
As I infer the type of values flowing through your program, I see a conflict
between these two types:

    Content

    A

我认为A是内容的一种"子类型".我不能写

a:Content
a = {...}
init a

因为有些逻辑会对内容进行案例分析



1> Apanatshka..:

榆树的联盟类型是所谓的歧视联盟(或标记的联盟).区分部分是标签或构造函数.在这种情况下,我认为你想要:

type Content = TagA A | TagB B

请注意,第一个大写名称是标记,其他任何类型或类型变量.

现在你可以这样做:

a : A
a = { ... }
init (TagA a)

init您可以通过区分这两种类型:

init content =
  case content of
    TagA a -> ...
    TagB b -> ...

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有