Skip to content

Commit

Permalink
Begin to explain pattern-matching using record labels
Browse files Browse the repository at this point in the history
  • Loading branch information
igrep committed Apr 21, 2024
1 parent 7b1b980 commit 3c9d773
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions assets/18.md
Original file line number Diff line number Diff line change
Expand Up @@ -893,16 +893,26 @@ ghci| :}
but its type Entry -> String has only one
```

こういう風にレコードラベルを用いたパターンマッチをすれば、フィールドの順番が違っていてもよい
レコード型の値に対してパターンマッチをするもう一つの方法は、レコードラベルを使った方法です。「どのレコードラベルの値をどの変数に割り当てるか」を明示するので、フィールドの順番に寄らずにマッチできます

```
例として、先程の`formatEntry`関数をレコードラベルを使ったパターンマッチに書き換えてみましょう:

```haskell
ghci> :{
ghci| formatEntry :: Entry -> String
ghci| formatEntry (Entry { category = "", price = pri }) = "<Unknown category>" ++ ": " ++ show pri
ghci| formatEntry (Entry { category = cat, price = pri }) = cat ++ ": " ++ show pri
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- この部分がレコードラベルを使ったパターンマッチ
ghci| :}
```

パターンマッチしている部分のみ切り出してみます:

```haskell
Entry { category = cat, price = pri }
```

#### タプルに対する関数の引数でのパターンマッチ

便利なサンプルが[`Prelude`モジュール][6]にいくつかある。
Expand Down

0 comments on commit 3c9d773

Please sign in to comment.