
4 Feb
2016
4 Feb
'16
8:26 p.m.
Christopher Allen
My understanding was that the implicitly polymorphic levity, did (->) not change because it's a type constructor?
Prelude> :info (->) data (->) a b -- Defined in ‘GHC.Prim’ Prelude> :k (->) (->) :: * -> * -> *
Basically I'm asking why ($) changed and (->) did not when (->) had similar properties WRT * and #.
Yes, there is a bit of an inconsistency here. As far as I understand there is still a bit of magic around (->), which allows it to be more polymorphic than it appears. There's a bit of evidence of this magic here [1]. Cheers, - Ben [1] https://github.com/ghc/ghc/blob/84b0ebedd09fcfbda8efd7576dce9f52a2b6e6ca/com...