空リストのエラー

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]