替代榆树记录扩展

Jus*_*ser 5 records elm

我正在尝试将库从Elm 0.15迁移到0.16.记录扩展机制已被删除.

我的库提供了对物体的物理计算(表示为记录),并使用记录扩展来允许用户添加关于物体的标签和其他元数据.

我的示例代码通过在创建后为所有实体添加标签来显示此用法:

labeledBodies = map (\b -> { b | label = bodyLabel b.restitution b.inverseMass }) someBodies
Run Code Online (Sandbox Code Playgroud)

此标记实体列表也会传递给库:

main = Signal.map scene (run labeledBodies tick)
Run Code Online (Sandbox Code Playgroud)

什么样的工作:将meta参数硬编码为Body:

type alias Body a = {
  pos: Vec2, -- reference position (center)
  velocity: Vec2, -- direction and speed
  inverseMass: Float, -- we usually use only inverse mass for calculations
  restitution: Float, -- bounciness factor
  shape: Shape,
  meta: a
}
Run Code Online (Sandbox Code Playgroud)

但这会使API更加笨拙,因为它会强制辅助函数采用额外的参数.是否有更优雅的方式来应对这种变化?

mgo*_*old 1

如果该meta字段有类型怎么办Dict String String?那么你就不必做任何疯狂的笨拙的类型变量。Maybe String但是,您无法保证您传入的所有记录确实都有标签,因此您必须在这样做时使用 a Dict.get "label" r.meta