我可以定义这样的函数
method1 :: Int -> Int -> Int
method1 a b = a + b
main = print $ 1 `method1` 2如果我不想每次调用函数时都使用,但是我想在infix表单中使用它,我该如何做呢?
method1 :: Int -> Int -> Int
method1 a b = a + b
main = print $ 1 method1 2发布于 2013-09-04 04:03:23
简单的回答是,你不能。想象一下,如果a b c有潜在的缺陷,那么b的歧义是可怕的。但是你可以定义一个操作符来帮你做这件事。其中任何一个都能工作
a |+| b = method1
(|+|) a b = method1 a b
(|+|) = method1然后
a |+| b === a `method1` b === method1 a bhaskell's infix操作符的允许字符是有限的,可选
:|!@#$%^&*-+./<>?\~一个常见的库,透镜,有许多操作符作为同义词的较长的名称。这很常见。不过,请使用判断,否则最终您将得到比Haskell更多的perl :)
发布于 2013-09-04 10:53:50
对此,有一个卑鄙的、令人讨厌的“解决方案”--使用CPP宏。例:
{-# LANGUAGE CPP #-}
#define method1 `themethod`
module Main where
themethod x y = x + y
someValue = 3 method1 4这是编译的,在ghci中,someValue将等于7。
https://stackoverflow.com/questions/18605158
复制相似问题