私はScalaから来ました。ハスケルの左から右への連鎖方法(右から左へと反対)
今putStrLn . show . map (**2) . filter (< 3) $ [1..10]
を、この:私は$
と.
を使用して、すべてのネストされた括弧を取り除くことができます発見した後、私は最近、自分が書いた、
println((1 to 10).filter(_ < 3).map(x => x*x))
:だから私はしばしばのようなものを行いますコードは右から左に読み込まれますが、アラビア語に移行しない限り、これは私が推論するのが難しいです。
私は左から右に機能をチェーン化する他のトリックはありますか?それとも、これはちょうどハスケルの慣用的な方法ですか?
と表記することができます。「putStrLn。 show = print'。また、 'mapM'や' forM'を使うこともできます: 'forM [x | x < - [1..10]、x <3] $ print。 (** 2) 'のようなものです。 – Bakuriu
これに慣れれば、左から右へ推論するのが簡単になります。それはあなたに式のタイプを与えます。あなたのケースでは 'putStrnLn ...'私はIOだと分かっています。 – mb14
役に立たない観察:通常の連鎖関数アプリケーション(関数合成を使用しない)の 'flow'は右から左です: 'f。 g。 h $ x = f(g(h)(x))) 'となる。これは非常に古い規則です(Cのような構文でも保持されるため、ハスケル主義だけではありません)。これは、関数合成演算子ではなく、「後方」であるドットメソッド構文です。 Scalaの例では、 'flow'はトレースするのがずっと難しいことに注意してください。実際には '(1〜10)'の中間で始まり、次に右に移動してから、突然左に戻って 'println'にジャンプします。 – Ben