On Fri, Nov 13, 2009 at 3:26 PM, Andy Gimblett <haskell@gimbo.org.uk> wrote:
First a type family where the type Y is functionally dependent on the type X, and we have a function from Y to ().
class X a where type Y a enact :: Y a -> ()
This is ambiguous. Type families are not injective (that is, Y a ~ Y b does not imply a ~ b), so there's no way for the compiler to figure out which instance of X is being used when it encounters enact. Given these instances, instance X Int where type Y Int = Bool enact _ = () instance X Char where type Y Char = Bool enact _ = undefined What is "enact False"? I recall seeing a discussion of this in the GHC documentation, but I can't seem to locate it. -- Dave Menendez <dave@zednenem.com> <http://www.eyrie.org/~zednenem/>