[GHC] #13490: Ambiguous types with constraints on new variables

GHC ghc-devs at haskell.org
Wed Mar 29 15:25:48 UTC 2017


#13490: Ambiguous types with constraints on new variables
-------------------------------------+-------------------------------------
        Reporter:  crockeea          |                Owner:  (none)
            Type:  bug               |               Status:  closed
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.0.2
      Resolution:  worksforme        |             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 simonpj):

 > Why am I getting an ambiguous type error

 The "ambiguous type" check works like this.   Suppose we have
 {{{
 foo :: ty
 foo = blah
 }}}
 When is foo's type ambiguous?  Answer: consider
 {{{
 foo2 :: ty
 foo2 = foo
 }}}
 Does `foo2` typecheck OK?  If not, `foo`'s type is ambiguous.  Classic
 example
 {{{
 foo :: (Read a, Show a) =>  String -> String
 foo x = show (read x)

 foo2 :: (Read a, Show a) =>  String -> String
 foo2 = foo  -- Error!
 }}}
 Now in your case we try
 {{{
 foo2 :: (Typeable (C z), z ~ Foo zp) => C zp
 foo2 = foo
 }}}
 and it's this check (i.e. precisely the ambiguous-type test) that fails.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13490#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list