# 012: qsort に型注釈をつけるとエラー [↑up](bunny_notes) - issued: 2020-04-10 - 分類: A サンプルコードが fail - status: Closed (2020-04-10) # 現象 qsort に型注釈をつけると、片方でエラーする。心当たりはある。 qsort.hs: $$
{ qsort :: Ord a => [a] -> [a] qsort [] = [] qsort (x:xs) = qsort smaller ++ [x] ++ qsort larger where smaller = [a | a <- xs, a <= x] larger = [b | b <- xs, b > x] main :: IO () main = do let helo = "Hello, World!" putStrLn helo putStrLn.show $ qsort [3, 1, 4, 1, 5, 9, 2, 6, 5] putStrLn $ show $ qsort helo $$} 実行結果: $${ $ ./tcheck testcases/qsort.hs # 1. test-compile source file: testcases/qsort.hs dst dir: /qsort doCompile ... done. implicitPrelude ... done. doCompile ... bunnyc: renSigDoc $ A.Tycon IO CallStack (from HasCallStack): error, called at src/Rename.hs:318:23 in main:Rename $$} ## 調査ログ ### 2020-04-10 initialTypeConsts に "IO" -> tIO のエントリを加えて解決: $${ diff --git a/compiler/src/PreDefined.hs b/compiler/src/PreDefined.hs index 05322ab..004e4ee 100644 --- a/compiler/src/PreDefined.hs +++ b/compiler/src/PreDefined.hs @@ -267,5 +267,6 @@ initialTypeConsts = , ("Char", tChar) , ("Int", tInt) , ("Integer", tInteger) + , ("IO", tIO) , ("String", tString) ] $$} qsort の型注釈なしバージョンは、[2016 年 12 月にはすでに動いていた](HaskellInHaskell) のだから、これの型注釈ありまで3年以上かかったことになる。 ずっと放置してしまってたからなのだが、なんだか感慨深い。