¿Cómo funciona 'indefinido' en Haskell?

Tengo curiosidad por el valor "indefinido" en Haskell. Es interesante porque puedes ponerlo en cualquier lugar, y Haskell será feliz. Los siguientes son todos a-ok

[1.0, 2.0, 3.0 , undefined]  ::[Float]
[1, 2 ,3 undefined, 102312] :: [Int]
("CATS!", undefined)  :: (String, String)
....and many more

¿Cómo funciona indefinido bajo el capó? ¿Qué hace posible tener datos de todos los tipos de datos? ¿Me sería posible definir un valor como este que pueda poner en cualquier lugar, o es este un caso especial?

Respuestas a la pregunta(6)

Su respuesta a la pregunta