[Haskell-cafe] fundeps => type family
Ryan Ingram
ryani.spam at gmail.com
Sun Apr 3 22:14:28 CEST 2011
On Sun, Apr 3, 2011 at 1:00 PM, Tad Doxsee <tad.doxsee at gmail.com> wrote:
> "Equality constraints ... enable a simple translation of programs
> using functional dependencies into programs using family
> synonyms instead.
>
> So I tried:
>
> class (T s ~ a) => ShapeC a s where
> type T s :: *
> draw :: s -> String
> copyTo :: s -> T s -> T s -> s
>
> but got a compile error:
>
> Alas, GHC 7.0 still cannot handle equality superclasses: T s ~ a
>
> So my question is, how does one convert the above code to use type
> families instead of functional dependencies? Is one technique
> preferable over another?
>
Sadly the documentation assumes the feature that you show is missing. That
said, you don't need that feature for the simple FD you have.
Just do
class ShapeC s where
type T s :: *
draw :: s -> String
copyTo :: s -> T s -> T s -> s
This code should work:
data ShapeD a = forall s. (ShapeC s, a ~ T s) => MkShapeD s
instance ShapeC (ShapeD a) where
type T (ShapeD a) = a
draw (MkShapeD s) = draw s
copyTo (MkShapeD s) x y = MkShapeD (copyTo s x y)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20110403/8c26e66a/attachment.htm>
More information about the Haskell-Cafe
mailing list