如何将字符串记录转换为榆树中的浮点数

How to convert a record of strings to floats in elm

我有一条用户提供的记录:

type alias Model =
  { age : String,
    weight : String,
    height : String,
    appetite : String
  }

我想把它转换成数字:

type alias FloatModel =
  { age : Float,
    weight : Float,
    height : Float,
    appetite : Float
  }

我的挣扎是,如果用户输入了错误数据,String.toFloat 可能 return Nothing。所以我想我想要一个 Maybe FloatModel 来处理坏数据。我怎样才能对每个成员调用 String.toFloat,如果他们都成功了 return Just FloatModel 如果没有 return Nothing?

如果您想保留 FloatModel 的完整性,以便所有字段都是 Float 值,您可以使用一个带有 Model 和 return 的函数s 一个Maybe FloatModel,只有当所有字段都可以解析时才成功。

这可以通过 mapping over each of the fields 来完成,这样一次失败就会“冒泡”并导致函数 return Nothing.

deserializeModel : Model -> Maybe FloatModel
deserializeModel { age, weight, height, appetite } =
    Maybe.map4 FloatModel
        (String.toFloat age)
        (String.toFloat weight)
        (String.toFloat height)
        (String.toFloat appetite)