That link looks like it points to the manual for the most recent distribution, 
not HEAD. The edits I put into the manual for the new family instances are not 
there, for example.

Richard

On Jan 11, 2013, at 4:56 AM, Simon Peyton-Jones <simo...@microsoft.com> wrote:

> The manual for HEAD is always online here
> http://www.haskell.org/ghc/dist/current/docs/html/users_guide/type-families.html#type-instance-declarations
>  
> Simon
>  
> From: Richard Eisenberg [mailto:e...@cis.upenn.edu] 
> Sent: 11 January 2013 03:03
> To: Carter Schonwald
> Cc: Martin Sulzmann; glasgow-haskell-b...@haskell.org; Simon Peyton-Jones; 
> GHC Users Mailing List
> Subject: Re: Fundeps and type equality
>  
> Yes, I finished and pushed in December. A description of the design and how 
> to use the feature is here:
> http://hackage.haskell.org/trac/ghc/wiki/NewAxioms
>  
> There's also a section (7.7.2.2 to be exact) in the manual, but building the 
> manual from source is not for the faint of heart.
>  
> Richard
>  
> On Jan 10, 2013, at 3:14 PM, Carter Schonwald <carter.schonw...@gmail.com> 
> wrote:
> 
> 
> so the overlapping type families  are in HEAD?
>  
> Awesome! I look forward to finding some time to try them out :) 
>  
> 
> On Thu, Jan 10, 2013 at 1:56 PM, Richard Eisenberg <e...@cis.upenn.edu> wrote:
> For better or worse, the new overlapping type family instances use a 
> different overlapping mechanism than functional dependencies do. Class 
> instances that overlap are chosen among by order of specificity; overlapping 
> instances can be declared in separate modules. Overlapping family instances 
> must be given an explicit order, and those that overlap must all be in the 
> same module. The decision to make these different was to avoid type soundness 
> issues that would arise with overlapping type family instances declared in 
> separate modules. (Ordering a set of family instance equations by 
> specificity, on the other hand, could easily be done within GHC.)
>  
> So, as yet, we can't fully encode functional dependencies with type families, 
> I don't think.
>  
> Richard
>  
> On Jan 2, 2013, at 4:01 PM, Martin Sulzmann 
> <martin.sulzmann.hask...@googlemail.com> wrote:
> 
> 
> 
> I agree with Iavor that it is fairly straight-forward to extend FC to support 
> FD-style type improvement. In fact, I've formalized such a proof language in 
> a PPDP'06 paper:
> "Extracting programs from type class proofs"
> (type improvement comes only at the end)
> 
> Similar to FC, coercions (proof terms) are used to represent type equations 
> (improvement).
> 
> Why extend FC?
> Why not simply use type families to encode FDs (and thus keep FC simple and 
> small).
> 
> It's been a while, but as far as I remember, the encoding is only problematic 
> in case of the combination of FDs and overlapping instances. Shouldn't this 
> now be fixable given
> that type family instances can be overlapping?
> Maybe I'm missing something, guess it's also time to dig out some old notes 
> ...
> 
> -Martin
> 
> On Wed, Jan 2, 2013 at 10:04 AM, Simon Peyton-Jones <simo...@microsoft.com> 
> wrote:
> As far as I understand, the reason that GHC does not construct such proofs is 
> that it can't express them in its internal proof language (System FC).  
>  
> Iavor is quite right
>  
> It seems to me that it should be fairly straight-forward to extend FC to 
> support this sort of proof, but I have not been able to convince folks that 
> this is the case.  I could elaborate, if there's interest.
>  
> Iavor: I don’t think it’s straightforward, but I’m willing to be educated.  
> By all means start a wiki page to explain how, if you think it is. 
>  
> I do agree that injective type families would be a good thing, and would deal 
> with the main reason  that fundeps are sometimes better than type families.  
> A good start would be to begin a wiki page to flesh out the design issues, 
> perhaps linked fromhttp://hackage.haskell.org/trac/ghc/wiki/TypeFunctions
>  
> The main issues are, I think:
> ·         How to express functional dependencies like “fixing the result type 
> and the first argument will fix the second argument”
> 
> ·         How to express that idea in the proof language
> 
>  
> Simon
>  
> From: glasgow-haskell-bugs-boun...@haskell.org 
> [mailto:glasgow-haskell-bugs-boun...@haskell.org] On Behalf Of Iavor Diatchki
> Sent: 26 December 2012 02:48
> To: Conal Elliott
> Cc: glasgow-haskell-b...@haskell.org; GHC Users Mailing List
> Subject: Re: Fundeps and type equality
>  
> Hello Conal,
>  
> GHC implementation of functional dependencies is incomplete: it will use 
> functional dependencies during type inference (i.e., to determine the values 
> of free type variables), but it will not use them in proofs, which is what is 
> needed in examples like the one you posted.  The reason some proving is 
> needed is that the compiler needs to figure out that for each instantiation 
> of the type `ta` and `tb` will be the same (which, of course, follows 
> directly from the FD on the class).
>  
> As far as I understand, the reason that GHC does not construct such proofs is 
> that it can't express them in its internal proof language (System FC).  It 
> seems to me that it should be fairly straight-forward to extend FC to support 
> this sort of proof, but I have not been able to convince folks that this is 
> the case.  I could elaborate, if there's interest.
>  
> In the mean time, the way forward would probably be to express the dependency 
> using type families, which I find tends to be more verbose but, at present, 
> is better supported in GHC.
>  
> Cheers,
> -Iavor
> PS: cc-ing the GHC users' list, as there was some talk of closing the 
> ghc-bugs list, but I am not sure if the transition happened yet.
>  
>  
>  
>  
> 
> On Tue, Dec 25, 2012 at 6:15 PM, Conal Elliott <co...@conal.net> wrote:
> I ran into a simple falure with functional dependencies (in GHC 7.4.1):
> 
> > class Foo a ta | a -> ta
> > 
> > foo :: (Foo a ta, Foo a tb, Eq ta) => ta -> tb -> Bool
> > foo = (==)
> 
> I expected that the `a -> ta` functional dependency would suffice to prove 
> that `ta ~ tb`, but
> 
>     Pixie/Bug1.hs:9:7:
>         Could not deduce (ta ~ tb)
>         from the context (Foo a ta, Foo a tb, Eq ta)
>           bound by the type signature for
>                      foo :: (Foo a ta, Foo a tb, Eq ta) => ta -> tb -> Bool
>           at Pixie/Bug1.hs:9:1-10
>           `ta' is a rigid type variable bound by
>                the type signature for
>                  foo :: (Foo a ta, Foo a tb, Eq ta) => ta -> tb -> Bool
>                at Pixie/Bug1.hs:9:1
>           `tb' is a rigid type variable bound by
>                the type signature for
>                  foo :: (Foo a ta, Foo a tb, Eq ta) => ta -> tb -> Bool
>                at Pixie/Bug1.hs:9:1
>         Expected type: ta -> tb -> Bool
>           Actual type: ta -> ta -> Bool
>         In the expression: (==)
>         In an equation for `foo': foo = (==)
>     Failed, modules loaded: none.
> 
> Any insights about what's going wrong here?
> 
> -- Conal
> 
> _______________________________________________
> Glasgow-haskell-bugs mailing list
> glasgow-haskell-b...@haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs
> 
>  
> 
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users@haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
> 
> 
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users@haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
>  
> 
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users@haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
> 
>  

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to