[GHC] #10116: Closed type families: Warn if it doesn't handle all cases

GHC ghc-devs at haskell.org
Sat Dec 26 19:28:28 UTC 2015


#10116: Closed type families: Warn if it doesn't handle all cases
-------------------------------------+-------------------------------------
        Reporter:  andrewthad        |                Owner:
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  7.8.4
      Resolution:                    |             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:                    |
-------------------------------------+-------------------------------------

Comment (by gkaracha):

 Replying to [comment:9 goldfire]:
 > I actually think I have the solution to this, but it's a rather large
 change (actually originally motivated by other problems): invent a new
 type `TyPat` that stores type patterns (instance LHSs)

 I really like this, having a separate data type for type patterns would
 certainly be a nice
 change and make things a lot easier.

 > > 2. Haskell is not lazy at the type level so I expect us to miss
 completeness which we can have at the term level due to laziness.
 >
 > Can you give an example? I don't understand.
 Hmmm, I have the following in mind:
 {{{#!hs
 data G = MkG G

 -- term level
 f :: G -> G
 f x = x -- non-redundant (inhabited by _|_, MkG _|_, etc)

 -- type level
 type family F (a :: G) :: G where
   F x = x -- redundant?
 }}}

 The way I see it, we can never construct a type of kind `G`, in contrast
 to the term level
 where every type is inhabited by bottom. Hence, at the term level, the
 checker does not need
 to unfold `x` to `MkG (MkG (...))`, for checking whether the clause is
 redundant. At the type
 level, I would expect the check to try this, and of course diverge. Does
 this make sense?

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


More information about the ghc-tickets mailing list