
#12159: Record-like GADTs with repeated fields (of same type) rejected -------------------------------------+------------------------------------- Reporter: heisenbug | Owner: Type: feature request | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.0.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by adamgundry): Yes, it's not quite anti-unification, but something like "find the most general type that binds all the type variables used in the field type, and can be instantiated to all the result types". I think we can reasonably require all the fields to have syntactically the same type, and use that as the result type of the selector. So we would pick `T a -> Bool` over `T a -> a`. Moreover, this wouldn't allow the following: {{{#!hs data S :: * -> * where S1 :: { s :: a } -> S a S2 :: { s :: Bool } -> S Bool S2 :: { s :: Int } -> S Int }}} even though in principle it could have a selector of type `S a -> a`. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12159#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler