在Elm中更新Maybe记录

时间:2018-01-25 22:22:59

标签: elm

我有一个用户可以创建项目的应用程序。模型中的currentProjectMaybe Project类型,初始值设置为Nothing(因为该用户可能尚未创建任何项目)。

type alias Project =
    { name : String }

type alias Model =
    { user : User
    , currentProject : Maybe Project
    }

这是模型的init

currentProject = Nothing

然后我有一个用户可以选择项目的下拉列表。选择后,onClick会调用以下更新:

type Msg
    = ...
    | SetProject Project

我尝试运行的更新功能如下所示:

SetProject project ->
    case project of
       Just project ->
         ( { model | currentProject = project }, Cmd.none )

       Nothing ->
         ( model, Cmd.none )

我收到错误,因为project类型为Project而非Maybe Project

我知道该项目的存在是因为它来自应用程序中现有的项目列表。但是,我无法将currentProject设置为Project,因为我需要使用Nothing初始化模型。

那么,如何使用Maybe Project类型更新Project记录?

2 个答案:

答案 0 :(得分:4)

使用Just构造函数:

SetProject project ->
     ( { model | currentProject = Just project }, Cmd.none )

答案 1 :(得分:3)

你的消息说你期待一个项目类型,但是你在它上面进行模式匹配以检查它是否是一个(可能是项目),但它不是。因此,要么在msg中传递一个Maybe Project,要么将更新功能更改为此。

SetProject project ->
    ( { model | currentProject = Just project }, Cmd.none )