空リストのエラー
haskellの型でハマった事例その3
main = print []
これを実行すると以下のようなエラーになる。
Ambiguous type variable `a' in the constraint: `Show a' arising from use of `print' at a.hs:1:7-11 Probable fix: add a type signature that fixes these type variable(s)
[]は[a]型の値だが、中身の値が一つもないので型変数aの型が推論出来ないのが気に入らないようだ。
なので、以下のように具体的な型を決めてやると文句を言わなくなる。
main = print ([]::[Int])
または、単に[]でも過去に何型のリストに使われていたものかがわかれば大丈夫。
main = print $ tail $ 1:[]
しかしなぜかmainを経由せずに直接実行するとエラーを出さずに動く
Prelude> print [] [] Prelude> :t [] [] :: [a]