[GHC] #9429: Alternative to type family Any

GHC ghc-devs at haskell.org
Mon Aug 18 08:52:08 UTC 2014


#9429: Alternative to type family Any
-------------------------------------+-------------------------------------
              Reporter:  mboes       |            Owner:
                  Type:  feature     |           Status:  new
  request                            |        Milestone:
              Priority:  normal      |          Version:  7.9
             Component:  Compiler    |         Keywords:
            Resolution:              |     Architecture:  Unknown/Multiple
      Operating System:              |       Difficulty:  Unknown
  Unknown/Multiple                   |       Blocked By:
       Type of failure:              |  Related Tickets:  9097, 9380
  None/Unknown                       |
             Test Case:              |
              Blocking:              |
Differential Revisions:              |
-------------------------------------+-------------------------------------

Comment (by ekmett):

 Note: you already have multiple "MyAnys" `Any` inhabits all kinds, so `Any
 :: Nat -> *` is also a perfectly cromulent type it can inhabit, allowing
 you to use `Any 0, Any 1, Any 2`...

 This means having `Any` doesn't just punch a "one extra distinguishable
 member of every kind" sized hole in the sanity of the typesystem but
 rather it creates an infinite family of such holes.

 I abused that for a while in Hask to create 'evil' targets for
 compositions of functors to other kinds, etc. but the status quo comes at
 a terrible terrible price. We can no longer reason that a closed kind has
 a fixed set of inhabitants.

 `Bool` is currently inhabited by `True`, `False`, and `Any 'FileNotFound`
 as distinguishable inhabitants along with an infinite set of other such
 exotic beasts.

 This implementation strategy is also very leaky. You have to be very
 careful, as it is possible to subvert the use of this sort of mechanism
 very easily (and accidentally) in the presence of functional dependencies
 when you go to apply it in situations where one of the arguments is a GADT
 or functional dependency, argument to a class, etc. This can lead to
 straight up segfaults, not just local type strangeness.

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


More information about the ghc-tickets mailing list