http://stackoverflow.com/questions/6364409/why-does-haskells-head-crash-on-an-empty-list-or-why-doesnt-it-return-an --- Is polymorphism lost by allowing empty list handling? If so, how so, and why? Are there particular cases which would make this obvious? --- The free theorem for head states that f . head = head . $map f Applying this theorem to [] implies that f (head []) = head (map f []) = head [] This theorem must hold for every f, so in particular it must hold for const True and const False. This implies True = const True (head []) = head [] = const False (head []) = False Thus if head is properly polymorphic and head [] were a total value, then True would equal False.