1. ホーム
  2. haskell

[解決済み] .の違いは何ですか?(ドット)と$(ドルマーク)の違いは何ですか?

2022-03-23 15:13:53

質問

ドットの違いは何ですか? (.) とドル記号 ($) ?

私の理解では、どちらも括弧を使わなくてもいいようにするための構文上の糖分です。

どのように解決するのですか?

その $ 演算子は、括弧を避けるためのものです。 この演算子の後に現れるものは、その前に現れるものに優先します。

たとえば、次のような行があったとします。

putStrLn (show (1 + 1))

もし、これらの括弧を取り除きたいのであれば、次のどの行でも同じことができます。

putStrLn (show $ 1 + 1)
putStrLn $ show (1 + 1)
putStrLn $ show $ 1 + 1

の主な目的は . 演算子は、括弧を避けるためではなく、関数を連結するためのものです。右側に表示されるものの出力を、左側に表示されるものの入力に結びつけることができる。 これも通常、括弧の数は少なくなるが、動作は異なる。

同じ例に戻ると

putStrLn (show (1 + 1))

  1. (1 + 1) は入力がないので . 演算子を使用します。
  2. show を取ることができます。 Int を返し String .
  3. putStrLn を取ることができます。 String を返し IO () .

を連鎖させることができます。 show から putStrLn このように

(putStrLn . show) (1 + 1)

もし、括弧が多すぎて気に入らない場合は $ 演算子を使用します。

putStrLn . show $ 1 + 1