44

簡単な質問ですが、ドル記号のように機能するが左側を優先する Haskell の演算子はありますか。代わりにIE

f (x 1) 

と書かれている

f $ x 1

として書きたいと思います。

x 1 $ f

これは純粋に文体的なものです。私は一連の関数を順番に実行していますが、左から右に読むのと一致するように左から右に書くことができればいいと思います。このためのオペレーターがいる場合は?

[更新] 数人から、自分で定義できないかどうか尋ねられました。答えとして、車輪を再発明する前に、既存のオペレーターがいないことを確認したかったのです。

4

6 に答える 6

43

GHC 7.10 ( base4.8.0.0)の時点で、 https : //hackage.haskell.org/package/base-4.8.0.0/docs/Data-Function.html に&あります。Data.Function

于 2015-07-11T01:49:21.080 に答える
35

flipHaskellでは、バイナリ関数または演算子の引数の順序を変更するために使用できます。

ghci> let (|>) = flip ($)
ghci> 3 |> (+4) |> (*6)
42
于 2010-11-04T11:20:28.410 に答える
20

標準の演算子があるかどうかはわかりませんが、独自の演算子を作成できない理由は何ですか? これはghciで機能します:

Prelude> let a $> b = b a
Prelude> 1 $> (+2)
3
Prelude> sum [1, 2] $> (+2)
5
Prelude> map (+2) [1, 2] $> map (+3)
[6,7]

UPDATE : hoogle でa -> (a -> b) -> b(この演算子のタイプです) を検索しても、何も役に立ちませんでした。

于 2010-11-03T18:16:49.127 に答える
10

このコンビネータは、データ鳥小屋パッケージで定義されています(頬の舌) :

Prelude Data.Aviary.BirdsInter> 1 `thrush` (+2)
Loading package data-aviary-0.2.3 ... linking ... done.
3

そのパッケージを実際に使用するのはかなりばかげたことですが、ソースを読むことは楽しいことであり、このコンビネータflip idが(または鳥類学の用語で)の魔法の呪文によって形成されていることを明らかにしcardinal idiotます。

于 2010-11-04T02:43:14.853 に答える
4

標準バージョンについては知りませんが、その目的で (#) がいくつかの場所で使用されているのを見たことがあります。特に頭に浮かぶのは HOC で、次のようなイディオムで使用されます。

someObject # someMessage param1 param2

同じように # 演算子を使用している他の「オブジェクト指向」ライブラリを見た覚えがあるようですが、いくつまたはどのライブラリかを思い出せません。

于 2010-11-03T18:22:41.583 に答える
-1

を再定義することはできませんか$

let ($) x f = f x

または、次のように別の演算子を選択するだけです$$

于 2010-11-03T18:18:31.207 に答える