替代榆树记录扩展

时间:2015-11-21 15:14:56

标签: records elm

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

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

我的example code通过在创建后为所有实体添加标签来显示此用途:

labeledBodies = map (\b -> { b | label = bodyLabel b.restitution b.inverseMass }) someBodies

此标记正文列表也会传递给库:

main = Signal.map scene (run labeledBodies tick)

有什么作用:将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
}

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

1 个答案:

答案 0 :(得分:1)

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