099: last.hs, init.hs で occurs check fails

↑up

概要

lib/Prelude.hs に関数を追加していく際、the language report にならって last, init を定義するとエラーが発生した(このため、違う書き方で回避した)。

これらの調査用にテストプログラムを作成。 last.hs, init.hs ともに occurs check fails となってエラーする。

調査ログ

2020-10-16 (Fri)

この 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