纯脚本嵌套行多态性
purescript nested row polymorphism
PureScript 示例 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
但这将要求两个参数具有完全相同的结构(同时仍允许额外的标签),而原始类型只要求每条记录具有相等性测试中使用的字段。
PureScript 示例 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
但这将要求两个参数具有完全相同的结构(同时仍允许额外的标签),而原始类型只要求每条记录具有相等性测试中使用的字段。