Haskell中的过载角括号作为内积运算符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Haskell中的过载角括号作为内积运算符相关的知识,希望对你有一定的参考价值。
我想知道我是否可以将尖括号'<'和'>'重载为:
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
我知道我可以像运算符一样重载'<&>':
Vec u <&> Vec v = Vec $ zipWith(x y -> x*y) u v
答案
不,你真的不能这样做。 Haskell不是Agda。 Haskell只识别()
,[]
和{}
括号。 ()
仅用于元组类型和分组。 {}
用于各种语法目的,没有一个你可以控制。 []
通常用于列表。您可以使用OverloadedLists
和/或MonadComprehensions
来影响列表语法的解释方式,但仅限于与您请求的内容无关的有限方式。没有办法说服Haskell <
或>
是括号。您可能会做的唯一想法是使用Template Haskell处理您自己的语法,但这将增加其自身的额外语法开销。
以上是关于Haskell中的过载角括号作为内积运算符的主要内容,如果未能解决你的问题,请参考以下文章
学习惯用 Haskell 的资源(eta 缩减、符号中缀运算符、库等)[关闭]
Haskell GLUT 库中的 ($=)(美元等于)运算符有啥作用?