purescript - 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 t0
t0
( i :: Int )
( i :: Int | t1 )
我认为由于对类型类存在功能依赖Nub
,并且Open Closed
是完全定义的,n
因此应该是可以解决的。所以我不确定问题出在哪里。
解决方案
推荐阅读
- azure-active-directory - 上传自定义策略的 Azure AD B2C 内部错误
- c# - Asp Core 2.1 Jwt + 身份。userManager 存储没有实现 IUserRoleStore
- ruby-on-rails - Rails has_and_belongs_to_many 和表单
- zend-framework - 5.7.1
:客户端主机被拒绝:访问被拒绝 - php - 从 stdClass 对象 TotalRecords 获取数据
- typescript - 如何翻译成打字稿: require('module').globalPaths.push(process.env.NODE_MODULES_PATH);
- vba - 使用 VBA 和 WINSCP 从 MS-Access 上传 SFTP
- java - 更新 camel-sap 缓存而不重新启动整个实例
- java - 用于列表的 Java JAX-RS @DefaultValue
- javascript - 如何访问特定的 Web 元素 Selenium Python