You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unison中应用Remote.pure.run为何未消除Remote能力约束

Unison开发中Remote.pure.run未消除Remote能力约束问题

问题复现代码

在Unison开发中遇到如下问题,初始编写代码如下:

runGeneration :
  ([BasePair] -> Float)
  -> ([EntityFitness] ->{Random} [EntityFitness])
  -> [EntityFitness]
  ->{Random, Remote} [EntityFitness]
runGeneration = iterateGenDefault 0.8 0.5

bar = Remote.pure.run 'runGeneration

UCM中展示的定义签名如下:

⍟ These new definitions are ok to `add`:

  bar : Either
          Failure
          (([BasePair] -> Float)
          -> ([EntityFitness] ->{Random} [EntityFitness])
          -> [EntityFitness]
          ->{g, Remote, Random} [EntityFitness])

⍟ These names already exist. You can `update` them to your new definition:

  runGeneration : ([BasePair] -> Float)
                  -> ([EntityFitness] ->{Random} [EntityFitness])
                  -> [EntityFitness]
                  ->{Remote, Random} [EntityFitness]

按能力处理器的运行逻辑,调用Remote.pure.run本应消除对应的Remote能力约束,但上述输出中bar的签名仍保留了Remote能力要求,最初猜测问题是能力要求放在了签名的错误位置。

对照验证测试

为排查问题做了两组对照测试:

测试1:Random能力处理器效果验证

使用Random能力的简单示例,应用处理器后Random能力要求被正常消除,代码如下:

randFooH : Nat ->{Random} Nat
randFooH max = Random.natIn 1 max

randFoo max = Random.splitmix 1234 '(randFooH max)

UCM输出签名符合预期,Random能力被成功消除:

⍟ These new definitions are ok to `add`:

  randFoo  : Nat -> Nat
  randFooH : Nat ->{Random} Nat

测试2:自包含Remote能力处理器效果验证

验证是否为Remote能力的特有问题,编写自包含的Remote逻辑示例,应用处理器后Remote能力被正常消除,代码如下:

forkHelloH:  '{Remote} Nat
forkHelloH = 'let
  use Nat +
  use Remote await forkAt here!
  t1 = forkAt here! '(1 + 1)
  t2 = forkAt here! '(2 + 2)
  await t1 + await t2

forkHello = Remote.pure.run forkHelloH

UCM输出签名符合预期,Remote能力被成功消除:

⍟ These new definitions are ok to `add`:

  forkHello  : Either Failure Nat
  forkHelloH : '{Remote} Nat

问题根因

最初尝试部分应用能力处理器是为了调试问题,Unison的通用最佳实践是尽可能延后应用能力处理器。本次问题的根本原因是实现的部分函数未做能力多态处理。


内容的提问来源于stack exchange,提问作者bbarker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 06:15:41