按示例5.9练习1和2
我的解决方案:
type HasCity r s = { address :: { city :: String | r } | s }
livesInLA :: forall r s. HasCity r s -> Boolean
livesInLA { address: { city: "Los Angeles" } } = true
livesInLA _ = false
sameCity :: forall r s t u. HasCity r s -> HasCity t u -> Boolean
sameCity a b = a.address.city == b.address.city
问题:
forall r s t u. HasCity r s -> HasCity t u
很讨厌...可以简化吗?
如果要将行保存为具有可选字段的行,而不是真正的。我唯一可以建议的简化是:
forall r s. HasCity r s -> HasCity r s -> Boolean
,但这需要两个参数具有完全相同的结构(同时仍然允许额外的标签(,而原始类型仅要求每个记录都具有相等测试中使用的字段。