如何在 Elm 中创建 Maybe 记录而不是 Maybes 记录
How to create a Maybe record instead of a record of Maybes in Elm
这可能是一件简单的事情,但我正在编写一个函数,我想 return 一条记录,并且有几个字段需要做一些可能会失败的事情,所以现在结果记录看起来像这样(假设它的类型别名为 MyRecord
)。
{ field1 : Maybe a
, field2 : Maybe a
, field3 : Maybe a
}
然而,这并不能准确代表所发生事情的 "real" 含义。该函数的基本目标是验证和重新格式化某些数据。所以我想说,如果我有一个 MyRecord
,我就有三个价值 a
的字段。如果我没有这些字段,我想知道我没有 MyRecord
。那么,从逻辑上讲,我想 return 一个 Maybe MyRecord
,但对于我来说,这是在逃避我的 newish-to-elm 能力。
目前,我正在一次创建所有记录,但由于显而易见的原因,这不起作用:
{ 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
类似的方法,其优点是您可以传递有关哪个函数失败的信息(严格来说,这是第一个失败的函数)。
这可能是一件简单的事情,但我正在编写一个函数,我想 return 一条记录,并且有几个字段需要做一些可能会失败的事情,所以现在结果记录看起来像这样(假设它的类型别名为 MyRecord
)。
{ field1 : Maybe a
, field2 : Maybe a
, field3 : Maybe a
}
然而,这并不能准确代表所发生事情的 "real" 含义。该函数的基本目标是验证和重新格式化某些数据。所以我想说,如果我有一个 MyRecord
,我就有三个价值 a
的字段。如果我没有这些字段,我想知道我没有 MyRecord
。那么,从逻辑上讲,我想 return 一个 Maybe MyRecord
,但对于我来说,这是在逃避我的 newish-to-elm 能力。
目前,我正在一次创建所有记录,但由于显而易见的原因,这不起作用:
{ 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
类似的方法,其优点是您可以传递有关哪个函数失败的信息(严格来说,这是第一个失败的函数)。