2011-11-06 4 views
5

1つのファイルでは、通常のプレリュード(++)演算子を使用する必要があります。また、(++)に対して独自の動作を実装したいと考えています。私は私のファイルの先頭にimport Prelude hiding (++)を使用しています。私自身の(++)演算子を定義していますが、今ではさらに下に、私は通常のプレリュード(++)を参照したいと考えています。これをどのように達成するのですか?コードの先頭にHaskell Prelude隠れて、元に戻す?

import Prelude hiding ((++)) 

に加えて

答えて

14

書き込み

import qualified Prelude 

、とあなたはプレリュードで++を必要な場所Prelude.++を書きます。

4

伊藤剛さんの説明によれば、演算子はモジュール名で修飾することができます。しかし、独自のバージョンの(++)を定義することで、プログラムの読みやすさを増やしたいと思う可能性があります。後でそのモジュール名でオペレータを修飾することは奇妙な方法です。

"abc" Prelude.++ "def" は、 uglyです。

<++>や `append`のような挿入関数のような新しい演算子を作るだけではどうですか?

+3

ええ、実際に質問への私の最初の反応は "私はそれを投稿していませんでしたが、(++)'、 "あなたの関数の名前を付けないでください。しかし、質問者がPreludeの '++ 'に取って代わる' ++ 'を持つライブラリを書いている場合、ライブラリのユーザは理想的には' Prelude。++ 'を使う必要はありません。このような(まれな)ケースでは、同じ名前の関数を定義するのが理にかなっています。それ以外の場合は、あまりにも一般的なものと名前の衝突を引き起こすことはほとんど意味がありません。 –

+1

特に、その質問がそのモチベーションについての十分な情報を与えていないときに、人々は「やめないでください」という質問と回答を過ぎて読んだとき、私を苛立たせ始めている。探検家が探検し、彼らが正しいと思ったことを試行させて、彼らが行ったときにどれほど醜いのかを直接見てみましょう。まもなく彼らは私の*答えにこのコメントを書く立場になるでしょう。 :-) – luqui