我可以定义这样的函数
method1 :: Int -> Int -> Int
method1 a b = a + b
main = print $ 1 `method1` 2
如果我不想每次调用函数时都使用``,但我想以中缀形式使用它,我该怎么做?
method1 :: Int -> Int -> Int
method1 a b = a + b
main = print $ 1 method1 2
我可以定义这样的函数
method1 :: Int -> Int -> Int
method1 a b = a + b
main = print $ 1 `method1` 2
如果我不想每次调用函数时都使用``,但我想以中缀形式使用它,我该怎么做?
method1 :: Int -> Int -> Int
method1 a b = a + b
main = print $ 1 method1 2
简短的回答是,你不能。a b c
想象一下if的可怕歧义b
可能是中缀。但是您可以定义一个运算符来为您执行此操作。这些中的任何一个都可以
a |+| b = method1
(|+|) a b = method1 a b
(|+|) = method1
然后
a |+| b === a `method1` b === method1 a b
haskell 的中缀运算符允许的字符是有限的,从
:|!@#$%^&*-+./<>?\~
一个通用库,lens,有很多操作符作为更长名称的同义词。这很常见。不过请务必使用判断,否则您最终会得到比 Haskell 更多的 perl :)
对此有一个卑鄙而讨厌的“解决方案” - 使用 CPP 宏。例如:
{-# LANGUAGE CPP #-}
#define method1 `themethod`
module Main where
themethod x y = x + y
someValue = 3 method1 4
这编译,在 ghci 中,someValue
将等于 7。但是请不要这样做......