# 099: last.hs, init.hs で occurs check fails [↑up](bunny_notes) - issued: 2020-06-04 - 分類: A サンプルコードが fail - status: Closed (2020-10-16) ## 概要 lib/Prelude.hs に関数を追加していく際、the language report にならって last, init を定義するとエラーが発生した(このため、違う書き方で回避した)。 これらの調査用にテストプログラムを作成。 last.hs, init.hs ともに occurs check fails となってエラーする。 ## 調査ログ ## 2020-10-16 この 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
$$}