我正在尝试将库从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更加笨拙,因为它会强制辅助函数采用额外的参数。是否有更优雅的方式来应对这种变化?
答案 0 :(得分:1)
如果meta
字段的类型为Dict String String
,该怎么办?那你就不必做任何疯狂的类型变量笨拙。但是,您不能保证您传入的所有记录确实都有标签,因此当您执行Maybe String
时必须使用Dict.get "label" r.meta
。