
On Thu, 2008-09-11 at 13:23 +0200, Johannes Waldmann wrote:
Well, it's a library that others might use, so I would prefer to avoid using language extensions, especially functional deps which I don't understand, and which seem to have an uncertain future.
I think there will be a storm of protest if support for this simple shape of dependencies ( ... | a -> b ) would be dropped from the major Haskell implementations.
For backwards-compatibility reasons, or because you think they're better than type families? Personally, I am quite enthusiastic about type families, although that is influenced by a (somewhat abandoned) project of mine that ended up with a 3 parameter type class (5 for the sub-class created for quickCheck support) with one-to-one relations every way. And multiple `global' variables implemented with dynamic parameters (they would have needed to be thread-local, eventually, anyway) with types parameterized on the afore-mentioned 3 parameters plus two more to allow the choice between ST and STM. When you get types like this: -- | Wait for another thread to change the buffer contents. displayWaitRedisplay :: (Buffer b d mk, ?currentBuffer :: BufferState b d mk STM TVar, ?currentWindow :: Window b d mk c STM TVar) => b TVar -> STM () types like this: -- | Wait for another thread to change the buffer contents. displayWaitRedisplay :: (Buffer b, ?currentBuffer :: BufferState b STM, ?currentWindow :: Window b c STM) => b TVar -> STM () look like heaven. jcc