apologies if this gets to the list twice.
---

hello,

there seems to be something wrong with the
implementation of functional dependencies,
or perhaps the expansion of type synonyms.
i am using hugs (september 2003).  the program:

> module Test where
>
> class C a b | a -> b where
>  mk :: IO a
>  eq :: a -> a -> IO Bool
>
> type F = IO
>
> instance C a x => C [a] (F a)
>
> test ys = do x  <- mk
>              xs <- mk
>              eq ys (x:xs)

causes the error:

ERROR "test.lhs":18 - Constraints are not consistent with functional dependency
*** Constraint : C [a] (IO a a)
*** And constraint : C [a] (F a)
*** For class : C a b
*** Break dependency : a -> b


if 'type F = IO' is replaced with 'type F a = IO a' one gets
*** Constraint       : C [a] (IO [a])

if i inline the definition of 'F' things seem to work.

if i remove the assumption on the instance:
*** Constraint       : C [a] (b a)

if i remove the assumption on the instance, and eta-expand the type synonym:
*** Constraint       : C [a] (IO (IO a))

bye
iavor


-- ================================================== | Iavor S. Diatchki, Ph.D. student | | Department of Computer Science and Engineering | | School of OGI at OHSU | | http://www.cse.ogi.edu/~diatchki | ==================================================

_______________________________________________
Hugs-Bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/hugs-bugs

Reply via email to