gpt4 book ai didi

record - 如何在 Elm 中创建 Maybe 记录而不是 Maybes 记录

转载 作者:行者123 更新时间:2023-12-01 14:02:49 27 4
gpt4 key购买 nike

这可能是一件简单的事情,但我正在编写一个想要返回记录的函数,并且其中几个字段需要执行可能失败的操作,所以现在结果记录看起来像这样(假设它是类型别名为 MyRecord)。

{ field1 : Maybe a
, field2 : Maybe a
, field3 : Maybe a
}

但是,这并不能准确地代表所发生事件的“真实”含义。该函数的根本目标是验证和重新格式化某些数据。所以我想说,如果我有一个 MyRecord,我就有三个相当于 a 的字段。如果我没有这些字段,我想知道我没有 MyRecord。从逻辑上讲,我想返回一个 Maybe MyRecord,但对于我来说,这正在逃避我的新功能。

目前,我正在一次性创建所有记录,但由于显而易见的原因,这不起作用:

{ field1 = maybeProducingFunction1
, field2 = maybeProducingFunction2
, field3 = maybeProducingFunction3
}

如何创建此记录,以便如果这些函数中的任何一个生成 Nothing,则整个记录都是 Nothing

最佳答案

如果我理解正确,你想要的是定义一个类型

type alias MyRecord =
{ field1 : Maybe a
, field2 : Maybe a
, field3 : Maybe a
}

只有当您拥有所有三个组成数据时才创建记录?实现这一点的方法是使用 Maybe.map3:

myResult = 
Maybe.map3 MyRecord
maybeProducingFunction1
maybeProducingFunction2
maybeProducingFunction3

这将为您执行所有 Maybe 检查,并且仅在它们都具有 Just 值时构建您的记录。

您还可以采用与 Result 类似的方法,其优点是您可以传递有关哪个函数失败的信息(严格来说,哪个函数是第一个失败的函数)。

关于record - 如何在 Elm 中创建 Maybe 记录而不是 Maybes 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59242378/

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