Commit 5be601e 1 parent d2453b1 commit 5be601e Copy full SHA for 5be601e
File tree 1 file changed +18
-6
lines changed
1 file changed +18
-6
lines changed Original file line number Diff line number Diff line change @@ -138,17 +138,29 @@ ghci> :set -XNoTypeApplications
138
138
139
139
###### ` TypeApplications ` を使う
140
140
141
- ```
141
+ いよいよ、` TypeApplications ` を使ってみましょう:
142
+
143
+ ``` haskell
142
144
ghci> : set - XTypeApplications
145
+ ```
146
+
147
+ ここでは例として、` map ` 関数に` TypeApplications ` を使ってみます:
148
+
149
+ ``` haskell
143
150
ghci> : t map
144
151
map :: (a -> b ) -> [a ] -> [b ]
145
- ghci> map length ["aaa", "bb", "cccc"]
146
- [3,2,4]
147
152
```
148
153
149
- ` map @Bool ` と書くことで、` Bool ` のリスト専用の` map ` ができる
150
- ` map :: (a -> b) -> [a] -> [b] ` の最初の型引数` a ` に` Bool ` を代入するのと同じ意味になる
151
- 通常、この、型変数に具体的な型を代入する処理は型推論によってコンパイル時に自動で行われますが、` TypeApplications ` を有効にすることで、ユーザー自ら制御できるようになります。
154
+ `map` 関数は、 上👆 の`: t`コマンドの結果の通り、 `a` と`b` という二つの型変数を使っています。 `TypeApplications `を使えば、 それぞれの型変数を手動で代入することができます。 例えば、 次のように`map @ Bool @ String `と書くと、 型変数`a `に`Bool `、 型変数`b `に`String `を代入した`map `関数が出来上がります:
155
+
156
+ ```haskell
157
+ ghci> : t map @ Bool @ String
158
+ map @ Bool @ String :: (Bool -> String ) -> [Bool ] -> [String ]
159
+ ```
160
+
161
+ 通常、この、型変数に具体的な型を代入する処理は型推論によってコンパイル時に自動で行われますが、` TypeApplications ` を有効にすると、ユーザーが自ら制御できるようになるのです。
162
+
163
+ ` TypeApplications ` で作られた` map @Bool @String ` は、` Bool ` 型のリストを受け取って、その各要素に` Bool -> String ` 関数を適用し、` String ` 型のリストを返す、専用の関数となっています。そのため、hoge
152
164
153
165
```
154
166
ghci> :t map @Bool
You can’t perform that action at this time.
0 commit comments