我可以定义一个像这样的函数
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
答案 0 :(得分:9)
嗯,简短的回答是,你做不到。想象一下,如果a b c
可能是中缀,b
会产生可怕的歧义。但您可以定义一个运算符来为您执行此操作。其中任何一个都可以使用
a |+| b = method1
(|+|) a b = method1 a b
(|+|) = method1
然后
a |+| b === a `method1` b === method1 a b
haskell的中缀运营商允许的追踪者有限,请从
中选择:|!@#$%^&*-+./<>?\~
一个公共的库,镜头,有许多运算符作为较长名称的同义词。这很常见。请尽量使用判断,否则你最终会得到比Haskell更多的perl:)
答案 1 :(得分:2)
对此有一个卑鄙而讨厌的“解决方案” - 使用CPP宏。例如:
{-# LANGUAGE CPP #-}
#define method1 `themethod`
module Main where
themethod x y = x + y
someValue = 3 method1 4
这个编译,在ghci中,someValue
将等于7.请不要这样做...