[GHC] #14426: Inferred type not principle/most general?

GHC ghc-devs at haskell.org
Mon Nov 6 16:10:52 UTC 2017


#14426: Inferred type not principle/most general?
-------------------------------------+-------------------------------------
        Reporter:  Iceland_jack      |                Owner:  (none)
            Type:  bug               |               Status:  closed
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.2.1
      Resolution:  invalid           |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Changes (by RyanGlScott):

 * status:  new => closed
 * resolution:   => invalid


Comment:

 This is expected behavior. The issue is that the `Fn` constructor uses
 polymorphic recursion, and type inference in the presence of polymorphic
 recursion is known to be undecidable. You managed to get lucky and have
 GHC infer any type at all for `(#)`, but often type inference will fail
 completely in the presence of polymorphic recursion, as in the example
 below:

 {{{#!hs
 data FullTree a = Leaf | Bin a (FullTree (a, a))

 -- size :: FullTree a -> Int
 size Leaf = 0
 size (Bin _ t) = 1 + 2 * size t
 }}}

 See the
 [https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-810004.4.1
 Haskell Report's section on type signatures] for more.

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


More information about the ghc-tickets mailing list