2

假设我有一个操作员

infixl 9 @@

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

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

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

但这在某种程度上违背了它被中缀的意义。什么是惯用语?

4

2 回答 2

1

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

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

a.f {tail=[]} b
于 2021-03-24T07:04:54.493 回答
0

您可以使用

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

这有点长,但保留了语法

于 2021-08-04T18:21:31.563 回答