创建中缀功能

时间:2013-09-04 03:57:42

标签: haskell

我可以定义一个像这样的函数

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

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.请不要这样做...

相关问题