Dar*_*rio 8 syntax haskell functional-programming notation
我想在Haskell中重新定义几个算术运算符,以使它们更具可扩展性和通用性.
例如
class Mul a b c | a b -> c where
(*) :: a -> b -> c
Run Code Online (Sandbox Code Playgroud)
这似乎与...结合使用
import Prelude hiding ((*))
Run Code Online (Sandbox Code Playgroud)
隐藏标准*运算符.但是当然所有通常的乘法也必须起作用,所以我必须定义类似的东西
instance (Num t) => Mul t t t where
(*) = ??
Run Code Online (Sandbox Code Playgroud)
如何在此处访问原始*运算符(Prelude.(*)不起作用)以及如何定义实例类型以使其1 * 1不与Monomorpism Restriction冲突?
编辑 -
import qualified
Run Code Online (Sandbox Code Playgroud)
是一个很好的提示,谢谢.
但不幸的是,这迫使我明确地将所有标准方法纳入范围.我只想有可能重新定义某些绑定,其余部分保持不变.
那么两者结合在一起吗?就像是
import Prelude qualified ((*))
Run Code Online (Sandbox Code Playgroud)
Mic*_*zyk 23
回答编辑过的问题:
你可以做
import Prelude hiding ((*))
import qualified Prelude as P
Run Code Online (Sandbox Code Playgroud)
除了(*)通常的方式和(*)通过P前缀访问所有Prelude函数:
x = 5 + 3 -- works
y = 5 P.* 3 -- works
z = 5 * 3 -- complains about * not being in scope
Run Code Online (Sandbox Code Playgroud)