gpt4 book ai didi

elm - 了解榆树联合类型

转载 作者:行者123 更新时间:2023-12-04 16:28:38 24 4
gpt4 key购买 nike

我在榆树中的联合类型周围遇到了一些麻烦。我了解简单的用例,例如

type Visibility = All | Active | Completed

所以这意味着 Visiblity 的值可以是 All、Active 或 Completed。到现在为止还挺好。然而,我感到困惑的地方是
type Msg
= OnFetchMails (WebData (List Mail))
| OnFetchSmss (WebData (List SMS))

我应该如何解释这个?这是否意味着 Msg 可以是类型函数 OnFetchMails 的类型函数,它接受类型函数 WebData 接受邮件列表?或者我应该如何解释这个?
我不认为 (WebData (List Mail))是有效载荷吗?

足够有趣,我可以在不理解它的情况下让它工作

最佳答案

定义联合类型时,您会列出构造该类型值的所有方法。以最简单的形式,该定义如下所示:

type Visibility 
= All
| Active
| Completed

正如您所猜测的,这声明了类型 Visibility并定义了三个值,所有类型都是 Visibility .构造 Visibility 类型值的唯一方法是使用这三个选项之一。因此,我们经常称它们为“构造函数”。

这是一个稍微复杂的联合类型定义:
type TrainStatus
= OnTime
| Delayed Int

正如您所料,这定义了两个新的“构造函数”, OnTimeDelayed .但是看看它们的类型:
OnTime  : TrainStatus
Delayed : Int -> TrainStatus
OnTime构造函数接受零个参数,所以只是一个值;它已经是 TrainStatus .但是 Delayed被声明为单参数构造函数:它是一个创建新 TrainStatus 的函数出于 Int .因此, Delayed 5 , Delayed 10 , 和 Delayed 100都是有效的 TrainStatus值。 (我们可以将它们解释为“延迟 5 分钟”或类似的意思。)

一个构造函数可以接受多个参数;例如,如果我们想以字符串形式包含延迟的原因:
type TrainStatus
= OnTime
| Delayed Int String

ts : TrainStatus
ts = Delayed 20 "The conductor took a short nap."

其中定义了 Delayed : Int -> String -> TrainStatus .

如果您收到 TrainStatus ,您可以提取 IntString在它内部使用模式匹配:
case ts of
OnTime ->
"Your train is on time!"

Delayed minutes reason ->
"Your train has been delayed by " ++ toString minutes ++ " because " ++ reason

关于elm - 了解榆树联合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43784882/

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