064: take.hs で Non-exaustive Patterns in transExpr

↑up

概要

take.hs (以下)をコンパイルすると、 Non-exaustive Patterns in transExpr: Fatbar (OtherExpression (Const ...

take' :: Int -> [a] -> [a]
take' n xs     | n <= 0 = []
take' n []     = []
take' n (x:xs) = x : take' (n-1) xs

main = print $ take 5 [1, 2, 3, 4, 5, 6, 7]

なお、3 行目をtake' _ [] = [] にすると、既知のエラーだが、 matchVarCon error: ([PWildcard, ... となる。

調査ログ

2020-05-15 (Fri)

035 対処により、本件も解決…と思ったら勘違い。

take.hs, take2.hs ともに、take' を定義しておきながら、 lib/Prelude.hs の take を参照していたのでテストになっていなかった。 それを書き直したら、やはりエラー。ランタイムで abend するようになった。

2020-05-19 (Tue)

083 の対処過程で、この take.hs の形には対応した。

また、本件解決したので、lib/Prelude.hs の記述も直した。