
| The following doesn't seem to work. Is this a limitation of the current | implementation or will it never work? Are there any work arounds without | introducing extra type params into the data type E? | | > class G a b | a -> b where | > data E a :: * | > wrap :: b -> E a | > unwrap :: E a -> b | | > instance G a b where | > data E a = EC b -- this line - the b is not in scope. | > wrap = EC | > unwrap (EC b) = b | | I get "Not in scope: type variable `b'". That's a bug. b should be in scope However, your program is very suspicious! Associated data types *replace* functional dependencies, so you should not use both. Your probably want something like class G a where data E a :: * wrap :: a -> E a unwrap :: E a -> a Simon