I am learning Haskell and I don't understand why I can do this:

f :: [Int] -> Bool
f l  
    | l==l = True
    | otherwise = False

But I can't do this.

f :: [a] -> Bool
f l  
    | l==l = True
    | otherwise = False

What's going on under the hood?

Edit
Report