模式匹配嵌套联合类型
Pattern-matching the nested union types
我正在为计数 up/down 计时器建模。设置起始日期后,计时器会显示自该起始日期以来已经过去了多少时间,或者到该起始日期还剩多少时间。
type OriginDefined
= Up Date
| Down Date
type Origin
= OriginDefined
| OriginUndefined
type Model
= Tick OriginDefined
| Edit Origin
因此,计时器仅在定义起始日期时才开始计时。但是,编辑原点时,它之前可能已定义,也可能未定义。
现在我需要一个函数来 return defaultValue
作为日期输入,当我们处于 Edit
模式时。
dateInputDefaultValue : Origin -> String
dateInputDefaultValue origin =
case origin of
OriginUndefined ->
""
OriginDefined ->
...
在这里,我努力将 origin
进一步解构为 Up date
或 Down date
。在 case
表达式的第二个分支中,编译器拒绝将 origin
视为比 Origin
.
更具体的任何内容
这是艾莉 https://ellie-app.com/3zKCcX87wa1/0
我应该如何处理这样的模型?我应该以不同的方式建模吗?
您的类型可以编译,但是您有两个不同的 OriginDefined
定义:一个是名为 OriginDefined
的类型,它有两个构造函数,Up
和 Down
。另一个是 Origin
.
类型的无参数构造函数
我的预感是您试图让 Origin
上的 OriginDefined
构造函数携带类型 OriginDefined
的值。为此,您必须在 OriginDefined
构造函数上定义 OriginDefined
类型的参数:
type Origin
= OriginDefined OriginDefined
| OriginUndefined
现在你有了一个与 Elm 的 Maybe
类型同构的类型,所以删除 OriginDefined
类型并替换 Origin
与此:
type Origin
= Up Date
| Down Date
现在您可以在以前使用 defined/undefined 命名法的地方使用 Maybe
:
type Model
= Tick (Maybe Origin)
| Edit Origin
Maybe Origin
上的模式匹配可能如下所示:
dateInputDefaultValue : Maybe Origin -> String
dateInputDefaultValue origin =
case origin of
Nothing ->
""
Just (Up date) ->
"…"
Just (Down date) ->
"…"
我正在为计数 up/down 计时器建模。设置起始日期后,计时器会显示自该起始日期以来已经过去了多少时间,或者到该起始日期还剩多少时间。
type OriginDefined
= Up Date
| Down Date
type Origin
= OriginDefined
| OriginUndefined
type Model
= Tick OriginDefined
| Edit Origin
因此,计时器仅在定义起始日期时才开始计时。但是,编辑原点时,它之前可能已定义,也可能未定义。
现在我需要一个函数来 return defaultValue
作为日期输入,当我们处于 Edit
模式时。
dateInputDefaultValue : Origin -> String
dateInputDefaultValue origin =
case origin of
OriginUndefined ->
""
OriginDefined ->
...
在这里,我努力将 origin
进一步解构为 Up date
或 Down date
。在 case
表达式的第二个分支中,编译器拒绝将 origin
视为比 Origin
.
这是艾莉 https://ellie-app.com/3zKCcX87wa1/0
我应该如何处理这样的模型?我应该以不同的方式建模吗?
您的类型可以编译,但是您有两个不同的 OriginDefined
定义:一个是名为 OriginDefined
的类型,它有两个构造函数,Up
和 Down
。另一个是 Origin
.
我的预感是您试图让 Origin
上的 OriginDefined
构造函数携带类型 OriginDefined
的值。为此,您必须在 OriginDefined
构造函数上定义 OriginDefined
类型的参数:
type Origin
= OriginDefined OriginDefined
| OriginUndefined
现在你有了一个与 Elm 的 Maybe
类型同构的类型,所以删除 OriginDefined
类型并替换 Origin
与此:
type Origin
= Up Date
| Down Date
现在您可以在以前使用 defined/undefined 命名法的地方使用 Maybe
:
type Model
= Tick (Maybe Origin)
| Edit Origin
Maybe Origin
上的模式匹配可能如下所示:
dateInputDefaultValue : Maybe Origin -> String
dateInputDefaultValue origin =
case origin of
Nothing ->
""
Just (Up date) ->
"…"
Just (Down date) ->
"…"