
#15294: Unused "foralls" prevent types from being Coercible -------------------------------------+------------------------------------- Reporter: Iceland_jack | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.4.3 Keywords: Roles | Operating System: Unknown/Multiple Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- Just a quick question, do these have the same representation? {{{#!hs newtype A where A :: (Int -> Bool) -> A newtype B where B :: (forall (a::Type). Int -> Bool) -> B }}} I'm wondering because they aren't `Coercible` {{{
:t coerce :: A -> B
<interactive>:1:1: error: • Couldn't match representation of type ‘forall a. Int -> Bool’ with that of ‘Int -> Bool’ arising from a use of ‘coerce’ • In the expression: coerce :: A -> B }}} What about a new type `C`, that isn't `Coercible` to `B` either {{{#!hs newtype C where C :: (forall k (a :: k). Int -> Bool) -> C }}} Some is true when it's just the order of variables {{{#!hs -- D is not Coercible to E, "can't match type ‘Bool’ with ‘Ordering’" newtype D where D :: (forall (a::Bool) (b::Ordering). Int -> Bool) -> D newtype E where E :: (forall (a::Ordering) (b::Bool). Int -> Bool) -> E }}} My question is is this intended? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15294 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler