首页 > 解决方案 > 为什么`type alias`是在另一个模块中以相同方式定义的类型?

问题描述

例如,从模块中Task类型Task的文档中:

type alias Task err ok =
  Task err ok

或从源头:

type alias Task x a =
  Platform.Task x a

我认为答案是使它有可能从被定义为它自己的模块中公开。这个对吗?


更新:
Chad Gilbert 提出了一个很好的观点,提到了Platform原语,例如TaskandProcessId类型,它们的构造函数从未在那里使用过,但为什么这些会被分组在这样一个中心位置是有道理的。尽管他的回答没有解释为什么它们在各自的模块中被别名(参见上面的Process.Id和 Task.Task)。

我猜如果没有别名,任何尝试使用模块的TaskProcess都必须导入这些特定类型(即 , Platform.Task),Platform.ProcessId因为默认情况下不导入它们(请参阅Elm 的默认导入)。


UPDATE_2:
另一个例子是Value在模块Json.Decode模块中:

-- From the docs:
type alias Value = 
    Value

-- From the source:
type alias Value = JsEncode.Value

我认为这证明了我上面的假设,但我不愿意回答我的问题,因为我是 Elm 的新手,很容易出错。

标签: moduleelmtype-alias

解决方案


从文档中Platform.Task

前往该Task模块的文档以获取更多信息。因为是平台原语所以才在这里定义

在那里它被定义为:

type Task err ok = Task

...这并不能告诉我们太多。Task是一个不透明的类型,它的内部Task构造函数从不使用。它是 Elm 架构中的基本原语之一,基于上面的评论,似乎只是在其中定义,Platform因为它是一个以平台为中心的原语的方便分组。


推荐阅读