首页 > 解决方案 > purescript的类型系统可以解决结节的行吗

问题描述

假设我有type Open o = ( i :: Int | o )type Closed = ( i :: Int )。然后,如果我尝试实例化类似的东西,{ i: 1 } :: Record (Open Closed)我会得到一个错误,因为它缺少 label i。所以我想说的是{ i: 1 } :: forall n. Nub (Open Closed) n => n

但这不起作用,而且这个错误对我来说没有多大意义。它说它不能t0( i :: Int | t1 )(t0 is bound, t1 is unknown) 匹配,同时检查是否{ i: 1 }有 type Record t0。如果我在这里有一个开放的行,我想我会得到它。如果类型是开放的,则无法唯一确定节点。但据我所知,因为它试图匹配它应该试图匹配{ i: 1 },而不是。Record t0t0( i :: Int )( i :: Int | t1 )

我认为由于对类型类存在功能依赖Nub,并且Open Closed是完全定义的,n因此应该是可以解决的。所以我不确定问题出在哪里。

标签: purescript

解决方案


推荐阅读