回答編集履歴

4

単純な例の誤解しやすい点の改善

2015/08/15 00:15

投稿

YoshikuniJujo
YoshikuniJujo

スコア33

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  より単純な例でまずは説明します。
8
8
 
9
- たとえばx x = x xのような場合xの型はどうなるでしょうか。
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
- このようにするとx x = unR x xのように表現することができます。
23
+ このようにするとf x = unR x xのように表現することができます。
24
24
 
25
25
 
26
26
 

3

型変数の削除の変更漏れの修正

2015/08/15 00:15

投稿

YoshikuniJujo
YoshikuniJujo

スコア33

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  静的な型付けで再帰的な型を定義するこのやりかたは僕には非常に美しいように感じます。
40
40
 
41
- またA (C a)やZはChurch数を数値に変換するために用意したもので、本質的な部分ではありません。
41
+ またA CやZはChurch数を数値に変換するために用意したもので、本質的な部分ではありません。
42
42
 
43
43
 
44
44
 

2

型変数は不要であることに気づく。

2015/08/14 18:41

投稿

YoshikuniJujo
YoshikuniJujo

スコア33

test CHANGED
@@ -44,17 +44,17 @@
44
44
 
45
45
  ```Haskell
46
46
 
47
- data C a = C { unC :: C a -> C a } | A (C a) | Z
47
+ data C = C { unC :: C -> C } | A C | Z
48
48
 
49
49
 
50
50
 
51
- (.$.) :: C a -> C a -> C a
51
+ (.$.) :: C -> C -> C
52
52
 
53
53
  (.$.) = unC
54
54
 
55
55
 
56
56
 
57
- toInt :: C a -> Int
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 a
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 a
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 a
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 a
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 a
113
+ hoge :: C
114
114
 
115
115
  hoge = C (\n -> _if .$. (isZero .$. n) .$. one .$. n)
116
116
 

1

単純な例の誤りを修正した

2015/08/14 18:39

投稿

YoshikuniJujo
YoshikuniJujo

スコア33

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  より単純な例でまずは説明します。
8
8
 
9
- たとえばy = x xのような場合xの型はどうなるでしょうか。
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
- このようにするとy = unR x xのように表現することができます。
23
+ このようにするとx x = unR x xのように表現することができます。
24
24
 
25
25
 
26
26