回答編集履歴

1

書き掛けを投稿してしまった

2021/08/03 00:02

投稿

kakkun61
kakkun61

スコア285

test CHANGED
@@ -16,7 +16,19 @@
16
16
 
17
17
 
18
18
 
19
+ ```haskell
20
+
21
+ -- この2つは等価
22
+
23
+ apply f x = f x
24
+
25
+ apply = \f -> (\x -> f x)
26
+
27
+ ```
28
+
29
+
30
+
19
- ここで型の値の定義を合わせて見てみます。
31
+ ここで型の値の定義を照らし合わせて見てみます。
20
32
 
21
33
 
22
34
 
@@ -26,4 +38,62 @@
26
38
 
27
39
 
28
40
 
29
- 値と型の組は、「f」と「a 型の値を取って b 型の値を返す関数型」が組、同じように「x を取って f x を返す関数」と「a 型の値を取って b 型の値を返す関数型」が組となります。
41
+ 値と型の組は、「f」と「a 型の値を取って b 型の値を返す関数型」が組、同じように「x を取って f x を返す関数」と「a 型の値を取って b 型の値を返す関数型」が組となります。Haskell の記法で書くと次のようになります。
42
+
43
+
44
+
45
+ ```haskell
46
+
47
+ -- 「f」の型は「a 型の値を取って b 型の値を返す関数型」
48
+
49
+ f :: a -> b
50
+
51
+
52
+
53
+ -- 「x を取って f x を返す関数」の型は「a 型の値を取って b 型の値を返す関数型」
54
+
55
+ \x -> f x :: a -> b
56
+
57
+ ```
58
+
59
+
60
+
61
+ `\x -> f x :: a -> b` を同じように読み解いていくと下記のようになります。
62
+
63
+
64
+
65
+ ```haskell
66
+
67
+ -- 「x」の型は「a」
68
+
69
+ x :: a
70
+
71
+
72
+
73
+ -- 「f x」の型は「b」
74
+
75
+ f x :: b
76
+
77
+ ```
78
+
79
+
80
+
81
+ ここまでで説明は終わりです。
82
+
83
+
84
+
85
+ ----
86
+
87
+
88
+
89
+ おまけとして apply を TypeScript で書いてみます([Wandbox で実行](https://wandbox.org/permlink/Bm2NoHUcelHbSB8h))。
90
+
91
+
92
+
93
+ ```typescript
94
+
95
+ const apply: <A, B>(f: (A) => B) => ((x: A) => B) =
96
+
97
+ function<A, B>(f: (A) => B) { return function(x: A) { return f(x); } };
98
+
99
+ ```