纯净的嵌套行多态性



按示例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

,但这需要两个参数具有完全相同的结构(同时仍然允许额外的标签(,而原始类型仅要求每个记录都具有相等测试中使用的字段。

最新更新