[GHC] #12088: Promote data family instance constructors

GHC ghc-devs at haskell.org
Thu Aug 4 21:16:46 UTC 2016


#12088: Promote data family instance constructors
-------------------------------------+-------------------------------------
        Reporter:  alexvieth         |                Owner:
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler (Type    |              Version:  8.1
  checker)                           |
      Resolution:                    |             Keywords:  TypeInType
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  GHC rejects       |  Unknown/Multiple
  valid program                      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #11348            |  Differential Rev(s):  Phab:D2272
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by simonpj):

 Some thoughts, after discussion with my son Michael.

 * This entire problem arises only because of ''open'' type families; I
 think closed type families are fine.  We could simply ban the use of open
 type families in the kind signature of an open type family.  Or possibly
 all type families, I'm not sure.

 * Another idea: when we have a group of `type instance` decls, suppose we
 kind check them, but do not yet solve the kind equalities that arise; but
 add them to the instance environment anyway.  Now solve all the kind
 equalities.   In our example, we'd add both instances for `Open1` and
 `Open2` before trying to solve their kind equalities.  Seems a bit scary
 somehow.

 * Question: how do dependently typed languages deal with this?  For
 example, what if typechecking the defintion of a function `f` requires the
 type checker to evaluate calls to `f`?  In Haskell-land you could imagine
 {{{
 type family Id (a :: *) :: Id *
 }}}
   We reject this at the moment, but the idea is to get into a situation
 where, before having typechecked `f` we need to evaluate `f`.  That's
 rather like the situation with `Open1/2`.

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


More information about the ghc-tickets mailing list