Unison实现能力处理器时提示'Request'未识别,求排查解决
Unison 0.5.18中
Request符号无法识别的问题解决 问题背景
使用Unison版本release/0.5.18(2024-02-27构建),复制官方文档中的能力处理器代码:
structural ability Abort2 where Abort2.abort : {Abort2} a toDefault!.handler : '{g} a -> Request {Abort2} a ->{g} a toDefault!.handler default = cases { a } -> a { abort -> _ } -> !default
运行时触发错误:
I couldn't resolve any of these symbols: 4 | toDefault!.handler : '{g} a -> Request {Abort2} a ->{g} a Symbol Suggestions Request No matches
问题原因
Unison在0.5.x系列之后的版本(如0.6+)对能力处理器的语法做了重大调整,Request类型被移除,改用更简洁的模式匹配语法处理能力请求。你使用的0.5.18属于旧版语法体系,而官方文档可能已经更新到新版语法,导致代码不兼容。
解决方法
方法1:适配0.5.18版本的语法
修改为旧版能力处理器写法,无需Request类型,直接通过handle关键字定义处理器:
structural ability Abort2 where abort : {Abort2} a toDefault : a -> '{g, Abort2} a -> '{g} a toDefault default = handle cases x -> x abort -> !default
方法2:升级Unison版本
若想使用官方文档的新版语法,建议将Unison升级到0.6.x及以上版本。新版语法中能力处理器写法更简洁,示例代码如下:
structural ability Abort2 where abort : {Abort2} a toDefault : a -> '{g, Abort2} a -> '{g} a toDefault default = cases x -> x abort -> !default
内容的提问来源于stack exchange,提问作者rascio
相关产品推荐
相关产品推荐

