4

このような関数を定義できます

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
4

2 に答える 2

9

簡単に言えば、できません。a b cif bis潜在的に中置の恐ろしいあいまいさを想像してみてください。ただし、これを行うオペレーターを定義できます。これらのいずれかが機能します

a |+| b   = method1
(|+|) a b = method1 a b 
(|+|)     = method1

それで

a |+| b === a `method1` b === method1 a b

Haskell の中置演算子に使用できる文字は限られています。

:|!@#$%^&*-+./<>?\~

一般的なライブラリである lens には、長い名前の同義語として機能する多数の演算子があります。それはかなり一般的です。ただし、判断を下してください。そうしないと、Haskell よりも多くの perl を使用することになります :)

于 2013-09-04T04:03:23.000 に答える
2

これには、CPP マクロを使用する、卑劣で厄介な「解決策」があります。例えば:

{-# LANGUAGE CPP #-}

#define method1 `themethod`
module Main where

themethod x y = x + y

someValue = 3 method1 4

これはコンパイルされ、ghci ではsomeValue7 になります。ただし、これを行わないでください...

于 2013-09-04T10:53:50.227 に答える