如何在榆树中列出某种类型的定义

时间:2018-01-29 07:46:32

标签: elm

type alias Employee =
    { role : Role, name : String }


type Role
    = Engineer
    | Manager
    | Sales
    | Accounting
    | Hr


generateSample =
    Role.all |> List.map createModelWithType

我需要完成Role.all,在这种情况下即使Role也无法访问。什么是实现/替代表达方式的最佳方式。

2 个答案:

答案 0 :(得分:7)

没有自动方法列出类型的所有构造函数。你可以建立一个这样的列表:

allRoles : List Role
allRoles =
    [ Engineer
    , Manager
    , Sales
    , Accounting
    , Hr
    ]

在Elm中,没有类似于其他语言的简单枚举的概念。类型构造函数也可以有参数,这可能有助于理解为什么没有内置的方法来枚举构造函数列表。

答案 1 :(得分:2)

选择类型时需要考虑许多因素。这取决于将与数据一起使用的行为。也许正如您所知,您可以简单地选择一种有效的数据类型,并且看起来很简单。根据经验,您将看到选择一种类型优于另一种类型的优势。

为了更好地思考为不同问题选择类型的方式,您可能需要查看此演示文稿:https://www.youtube.com/watch?v=XpDsk374LDE 演示文稿中混合了两个主题,其中一个是如何为不同的行为选择类型。

这是一种方法:

type Alias Role = 
     { Engineer : Bool
     , Manager : Bool
     , Sales : Bool
     , Accounting : Bool
     , Hr : Bool
     }