
Hi All! Consider the following definitions: type family TFunIn t e type family TFunOut t e data IdT data ComposeT t1 t2 -- etc... type instance TFunIn (ComposeT t1 t2) e = TFunIn t2 e type instance TFunOut (ComposeT t1 t2) e = TFunOut t1 e -- etc... class SignalT t e where transform :: t -> TFunIn t e -> TFunOut t e instance (SignalT t1 e, SignalT t2 e) => SignalT (ComposeT t1 t2) e where transform _ x = (transform (undefined :: t1) . transform (undefined :: t2)) x Due to the `TFunIn` and `TFunOut` type families instances for [(ComposeT t1 t2) e], the `transform` function for [(ComposeT t1 t2) e] instance of SignalT should be inferred as: transform :: t -> TFunIn (ComposeT t1 t2) e -> TFunOut (ComposeT t1 t2) e <==> :: t -> TFunIn t2 e -> TFunOut t1 e But I cannot figure out why it does not compile. Any ideas? Thanks. -- Leza Morais Lutonda, Lemol-C http://lemol.github.io 50 Aniversario de la Cujae. Inaugurada por Fidel el 2 de diciembre de 1964 http://cujae.edu.cu