[Haskell-cafe] Multiparamater class type-inference error

Alfonso Acosta alfonso.acosta at gmail.com
Sun Jan 28 21:43:24 EST 2007


Hi all,

Sorry if this is too GHC-specific. I'm getting this strange
instantiation error when compiling the following code with GHC 6.6:

    No instance for (Synchronous s ((a, b) -> a) (a, b) a)
      arising from use of `mapSY' at SynchronousLib.lhs:342:8-16
    Possible fix:
      add an instance declaration for
      (Synchronous s ((a, b) -> a) (a, b) a)
    In the expression: mapSY fst
    In the definition of `fstSY': fstSY = mapSY fst

---
data Signal a = NullS
	      | a :- Signal a deriving (Eq)

class Synchronous s f1 a b | f1 -> a , f1 -> b where
 mapSY		:: f1 -> s  a -> s b
 delaySY	:: a ->  s  a -> s a

instance Synchronous Signal (a->b) a b where
  mapSY _ NullS	= NullS
  mapSY f (x:-xs)	= f x :- (mapSY f xs)
  delaySY e es = e:-es


fstSY = mapSY fst

{--
    No instance for (Synchronous s ((a, b) -> a) (a, b) a)
      arising from use of `mapSY' at SynchronousLib.lhs:342:8-16
    Possible fix:
      add an instance declaration for
      (Synchronous s ((a, b) -> a) (a, b) a)
    In the expression: mapSY fst
    In the definition of `fstSY': fstSY = mapSY fst
Failed, modules loaded: AbsentExt, Vector, Queue, Signal. --}
--

No error arises if fstSY is declared as

fstSY a = mapSY fst a

Is it GHC bug or am I supposed to declare it like that to assist type inference?

Thanks in advance,

Alfonso Acosta


More information about the Haskell-Cafe mailing list