我想知道我是否可以将尖括号'<'和'>'重载为:
data Vec a = Vec [Integer] deriving Show
let u = Vec [1, 2, 3]
let v = Vec [2, 4, 5]
<u, v> = inner product of u and v
Run Code Online (Sandbox Code Playgroud)
我知道我可以将'<&>'重载为运算符:
Vec u <&> Vec v = Vec $ zipWith(\x y -> x*y) u v
Run Code Online (Sandbox Code Playgroud)
不,你真的不能这样做.Haskell不是Agda.哈斯克尔认识到(),[]和{}仅括号.()仅用于元组类型和分组.{}用于各种语法目的,没有一个你可以控制.[]通常用于列表.您可以使用OverloadedLists和/或MonadComprehensions影响列表语法的解释方式,但仅限于与您请求的内容无关的有限方式.没有办法说服Haskell那个<或者>是括号.您可能会做的唯一想法是使用Template Haskell处理您自己的语法,但这将增加其自身的额外语法开销.