[commit: base] master: Implement "TypeLevelReasoning" proposal at wiki:TypeLevelReasoning (365b9d8)

Richard Eisenberg eir at cis.upenn.edu
Wed Jul 24 23:36:36 CEST 2013


I agree that hs-boot files are a little inelegant, but is there a bigger problem with them? I consider instances to be more tied to a datatype definition than the class definition. It may be possible (I think it is) to avoid the Proxy.hs-boot and Equality.hs-boot files if we scatter their instances across the modules. But, then the "definition" of these types would be spread across a large surface area. To me, that makes the types harder to update and perhaps harder to understand (though haddock does a nice job of collecting all the instance declarations together).

So, my thought is that the mechanism of hs-boot files may be a little ugly, but it makes the code (that is, the collection of instances) easier to consider as a whole and easier to update. That tradeoff seems worthwhile.

That all said, if you (or others) feel strongly about it, I can rejigger it.

Richard

On Jul 24, 2013, at 3:14 PM, Simon Peyton-Jones wrote:

> Richard I am deeply suspicious of all these hs-boot files. 
> 
> Instances should preferably go EITHER with the data type declaration OR with the class declaration.
> 
> In the case of Proxy, for example, why can't the Typeable instance for Proxy go in Data.Typeable.Internals?   (And perhaps similarly for other instances.)
> 
> Simon
> 
> |  -----Original Message-----
> |  From: ghc-commits [mailto:ghc-commits-bounces at haskell.org] On Behalf Of
> |  Richard Eisenberg
> |  Sent: 24 July 2013 12:41
> |  To: ghc-commits at haskell.org
> |  Subject: [commit: base] master: Implement "TypeLevelReasoning" proposal at
> |  wiki:TypeLevelReasoning (365b9d8)
> |  
> |  Repository : http://darcs.haskell.org/ghc.git/
> |  
> |  On branch  : master
> |  
> |  http://hackage.haskell.org/trac/ghc/changeset/365b9d86d195dc483610a68836b4
> |  063656602244
> |  
> |  >---------------------------------------------------------------
> |  
> |  commit 365b9d86d195dc483610a68836b4063656602244
> |  Author: Richard Eisenberg <eir at cis.upenn.edu>
> |  Date:   Wed Jul 24 12:38:50 2013 +0100
> |  
> |      Implement "TypeLevelReasoning" proposal at wiki:TypeLevelReasoning
> |  
> |      This commit includes a propositional equality (:=:) in Data.Type.Equality,
> |      a Proxy type in Data.Proxy, and has updates to Typeable.
> |  
> |      There is an unfortunate number of hs-boot files necessary, but that
> |      seems cleaner than moving Typeable instances around willy-nilly.
> |  
> |   Data/Data.hs                   |    2 +-
> |   Data/Proxy.hs                  |  129
> |  ++++++++++++++++++++++++++++++++++++++++
> |   Data/Proxy.hs-boot             |    5 ++
> |   Data/Type/Equality.hs          |   99
> |  ++++++++++++++++++++++++++++++
> |   Data/Type/Equality.hs-boot     |    6 ++
> |   Data/Typeable.hs               |   42 +++++++------
> |   Data/Typeable/Internal.hs      |    5 +-
> |   Data/Typeable/Internal.hs-boot |    3 +-
> |   base.cabal                     |    2 +
> |   9 files changed, 269 insertions(+), 24 deletions(-)
> |  
> |  
> |  Diff suppressed because of size. To see it, use:
> |  
> |      git show 365b9d86d195dc483610a68836b4063656602244
> |  
> |  _______________________________________________
> |  ghc-commits mailing list
> |  ghc-commits at haskell.org
> |  http://www.haskell.org/mailman/listinfo/ghc-commits
> 
> 
> 





More information about the ghc-devs mailing list