Skip to content

Commit

Permalink
Start to explain the section of operators
Browse files Browse the repository at this point in the history
  • Loading branch information
igrep committed Jan 7, 2024
1 parent 07b9a69 commit 245e2c5
Showing 1 changed file with 34 additions and 5 deletions.
39 changes: 34 additions & 5 deletions assets/18.md
Original file line number Diff line number Diff line change
Expand Up @@ -521,18 +521,47 @@ reverseLines = unlines . reverse . lines

### 演算子のセクション

先ほどの「`:t` で演算子の型定義も調べる・演算子を普通の関数のように前置記法で記述する」の節では、演算子の記号をカッコで囲うことで、普通の前置関数と同じように使えることを紹介しました。

```haskell
ghci> -- 3 * 4 と同じ
ghci> (*) 3 4
12

ghci> -- 10 - 2 と同じ
ghci> (-) 10 2
8
```
ghci> :t (/ 2)
(/ 2) :: Fractional a => a -> a

これと、「Haskellにおける関数はカリー化されている」という事実を組み合わせることができるのも、説明したとおりです:

```haskell
-- 2倍する関数を作る
ghci> double = (*) 2
ghci> double 10
20
```

「半分にする関数」ができる!
足し算`+`やかけ算`*`の演算子ではこれで十分なのですが、引き算`-`などのように左辺と右辺を逆にすると計算結果が変わる演算子では不都合な場合があります:

```haskell
-- 「1000 引く関数」を作るつもりが...
ghci> minus1000 = (-) 1000
-- 出来上がったのは、「1000 *から*引数に渡した値を引く関数」
ghci> minus1000 100
900
```
ghci> (/ 2) 10
5.0

もちろん、次のように引数の順番を入れ替えた関数を作れば、期待した関数が出来上がります:

```haskell
ghci> minus1000 l = l - 1000
ghci> minus1000 100
-900
```

実はこれをもっと簡単に作れるようにするのが、ここで紹介する「演算子のセクション」という機能です。

先頭に`"Hello, "`をくっつける関数

```
Expand Down

0 comments on commit 245e2c5

Please sign in to comment.