回答編集履歴
4
単純な例の誤解しやすい点の改善
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
より単純な例でまずは説明します。
|
8
8
|
|
9
|
-
たとえば
|
9
|
+
たとえばf x = x xのような場合xの型はどうなるでしょうか。
|
10
10
|
|
11
11
|
xの型がaだったとするとxは引数xを取り何かを返す関数でもあるのでxの型はa -> bとなります。
|
12
12
|
|
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
すると、型R aは(R a -> a)を保持する再帰的な型となります。
|
22
22
|
|
23
|
-
このようにすると
|
23
|
+
このようにするとf x = unR x xのように表現することができます。
|
24
24
|
|
25
25
|
|
26
26
|
|
3
型変数の削除の変更漏れの修正
test
CHANGED
@@ -38,7 +38,7 @@
|
|
38
38
|
|
39
39
|
静的な型付けで再帰的な型を定義するこのやりかたは僕には非常に美しいように感じます。
|
40
40
|
|
41
|
-
またA
|
41
|
+
またA CやZはChurch数を数値に変換するために用意したもので、本質的な部分ではありません。
|
42
42
|
|
43
43
|
|
44
44
|
|
2
型変数は不要であることに気づく。
test
CHANGED
@@ -44,17 +44,17 @@
|
|
44
44
|
|
45
45
|
```Haskell
|
46
46
|
|
47
|
-
data C
|
47
|
+
data C = C { unC :: C -> C } | A C | Z
|
48
48
|
|
49
49
|
|
50
50
|
|
51
|
-
(.$.) :: C
|
51
|
+
(.$.) :: C -> C -> C
|
52
52
|
|
53
53
|
(.$.) = unC
|
54
54
|
|
55
55
|
|
56
56
|
|
57
|
-
toInt :: C
|
57
|
+
toInt :: C -> Int
|
58
58
|
|
59
59
|
toInt Z = 0
|
60
60
|
|
@@ -64,7 +64,7 @@
|
|
64
64
|
|
65
65
|
|
66
66
|
|
67
|
-
toChurch :: Int -> C
|
67
|
+
toChurch :: Int -> C
|
68
68
|
|
69
69
|
toChurch 0 = zero
|
70
70
|
|
@@ -72,7 +72,7 @@
|
|
72
72
|
|
73
73
|
|
74
74
|
|
75
|
-
false, true, _if :: C
|
75
|
+
false, true, _if :: C
|
76
76
|
|
77
77
|
false = C (\x -> C (\y -> y))
|
78
78
|
|
@@ -82,7 +82,7 @@
|
|
82
82
|
|
83
83
|
|
84
84
|
|
85
|
-
zero, one, s :: C
|
85
|
+
zero, one, s :: C
|
86
86
|
|
87
87
|
zero = C (\f -> C (\x -> x))
|
88
88
|
|
@@ -92,7 +92,7 @@
|
|
92
92
|
|
93
93
|
|
94
94
|
|
95
|
-
isZero :: C
|
95
|
+
isZero :: C
|
96
96
|
|
97
97
|
isZero = C (\n -> n .$. (C (\x -> false)) .$. true)
|
98
98
|
|
@@ -110,7 +110,7 @@
|
|
110
110
|
|
111
111
|
|
112
112
|
|
113
|
-
hoge :: C
|
113
|
+
hoge :: C
|
114
114
|
|
115
115
|
hoge = C (\n -> _if .$. (isZero .$. n) .$. one .$. n)
|
116
116
|
|
1
単純な例の誤りを修正した
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
より単純な例でまずは説明します。
|
8
8
|
|
9
|
-
たとえば
|
9
|
+
たとえばx x = x xのような場合xの型はどうなるでしょうか。
|
10
10
|
|
11
11
|
xの型がaだったとするとxは引数xを取り何かを返す関数でもあるのでxの型はa -> bとなります。
|
12
12
|
|
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
すると、型R aは(R a -> a)を保持する再帰的な型となります。
|
22
22
|
|
23
|
-
このようにすると
|
23
|
+
このようにするとx x = unR x xのように表現することができます。
|
24
24
|
|
25
25
|
|
26
26
|
|