如何为中缀运算符指定隐式参数?

问题描述

假设我有一个操作员

infixl 9 @@

(@@) : Tensor [S n] t -> Tensor (S n :: tail) t -> Tensor tail t

(其中 Tensor 接受一个 Vect 和一个类型,但这在这里并不重要)。如果我想指定 tail,我知道我可以通过将 a @@ b 变成一个函数 @@ 来添加到 (@@),例如

(@@) {tail=[]} a b

但这有点违背了它是中缀的意义。什么是惯用语?

解决方法

您可以尝试使用后缀投影运算符:

(.f) : Tensor [S n] t -> Tensor (S n :: tail) t -> Tensor tail t

a.f {tail=[]} b
,

你可以使用

let (@@) = (@@) {tail=[]} in a @@ b

有点长但保持语法

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...