Brandon,

> Hm.  Seems to me that (with TypeFamilies and FlexibleContexts)
> 
>> h :: (x ~ y, Eval (y -> Int)) => (x -> Int) -> (y -> Int) -> Int
> 
> should do that, but ghci is telling me it isn't (substituting Eq for Eval
> for the nonce):
> 
>  Prelude> let h :: (x ~ y, Eq (y -> Int)) => (x -> Int) -> (y -> Int) ->
> Int; h = undefined
>  Prelude> :t h
>  h :: (Eq (x -> Int)) => (x -> Int) -> (x -> Int) -> Int
> 
> Bleah.  (as if it weren't obvious) I still don't quite grok this stuff....

Well... x ~ y kind of implies that x could replace y within the scope of the 
constraint: it's like one of the first thing I would expect to follow from a 
notion  of equality. ;-)  But actually if you push the constraint inward, into 
the type so to say, you actually get quite close to Janis' and David's solution.

Cheers,

  Stefan
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to