Chi*_*nke 3 haskell operator-overloading ghc
我正在尝试在Haskell中设计嵌入式语言,如果可能的话,我想给并置提供一个自定义的含义,通常表示函数应用程序.或者,几乎等效地,我想定义一个空格运算符,它具有正常的可定义运算符优先级.
就像是
( ) x y = x * y
Run Code Online (Sandbox Code Playgroud)
那么这将允许写乘法3 * 4
的3 4
.
GHC中是否有任何方法(使用任何必要的扩展)来实现这一点?
其实,是!
{-# LANGUAGE FlexibleInstances #-}
module Temp where
instance Num a => Num (a -> a) where
fromInteger n = (fromInteger n *)
n + m = \x -> n x + m x
-- ...
Run Code Online (Sandbox Code Playgroud)
然后在ghci:
? :l Temp
...
? 3 (4 :: Int) :: Int
12
? let _4 = 4 :: Int
? 3 _4 :: Int
12
? (3 + 4) (2 :: Int) :: Int
14
Run Code Online (Sandbox Code Playgroud)
符号0
,1
等在Haskell超载- 0 :: Num a => a
-他们可以代表任何东西,有一个Num
实例.因此,通过定义Num
函数的实例Num a => a -> a
,我们现在有了3 :: Num a => a -> a