我想在 Haskell 中重新定义几个算术运算符,以使它们更具可扩展性和通用性。
例如
class Mul a b c | a b -> c where
(*) :: a -> b -> c
这似乎与
import Prelude hiding ((*))
隐藏标准*
运算符。但是当然所有常用的乘法也必须起作用,所以我必须定义类似的东西
instance (Num t) => Mul t t t where
(*) = ??
如何在此处访问原始*
运算符(Prelude.(*)
不起作用)以及如何定义1 * 1
不与Monomorphism Restriction冲突的实例类型?
编辑-
import qualified
是一个很好的提示,谢谢。
但不幸的是,这迫使我明确地将所有标准方法纳入范围。我只想有可能重新定义某些绑定,而其余的保持不变。
那么有没有两者的结合呢?就像是
import Prelude qualified ((*))