lib/Prelude.hs に関数を追加していく際、the language report にならって last, init を定義するとエラーが発生した(このため、違う書き方で回避した)。
これらの調査用にテストプログラムを作成。 last.hs, init.hs ともに occurs check fails となってエラーする。
この issue 発行以来、かなり別件で修正してきているため、再確認したところ、 いずれも ok となっていた。
lib/Prelude.hs に反映(last.hs, init.hs は廃止)
diff --git a/compiler/lib/Prelude.hs b/compiler/lib/Prelude.hs index b611ac7..a02bd86 100644 --- a/compiler/lib/Prelude.hs +++ b/compiler/lib/Prelude.hs @@ -717,12 +717,12 @@ tail [] = error "Prelude.tail: empty list" last :: [a] -> a last [x] = x -last xs = last (tail xs) -- todo: occur check fail? +last (_:xs) = last xs last [] = error "Prelude.last: empty list" init :: [a] -> [a] init [x] = [] -init xs = head xs : init (tail xs) -- todo: occur check fail? +init (x:xs) = x : init xs init [] = error "Prelude.init: empty list" null :: [a] -> Bool