type synonyms/fun deps
Iavor Diatchki
diatchki at cse.ogi.edu
Sun Sep 14 21:55:58 EDT 2003
hello,
there seems to be something wrong with the
implementation of functional dependencies,
or perhaps the expansion of type synonyms.
i am using hugs from july 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 |
==================================================
More information about the Hugs-Bugs
mailing list