Hola Sebastian.
Es interesante lo que planteás. twice toList
no tipa porque toList
no tiene un tipo de la forma a -> a. La expresión toList . toList
está bien tipada. Parece paradójico.
Lo que ocurre es que para que toList . toList
esté bien tipada las ocurrencias de toList
tienen que tener tipos distintos..
Al usar twice
en Haskell "fijamos" la f
que aplicamos dos veces (incluido su tipo). Esto tiene que ver con la naturaleza del polimorfismo tal como lo implementa Haskell.