[Haskell-cafe] Re: Multiparamater class type-inference error

Alfonso Acosta alfonso.acosta at gmail.com
Sun Jan 28 21:53:49 EST 2007


Forgot to mention that no error arises if I explicitly give the type
signature of fstSY

fstSY        :: Signal (a,b) -> Signal a






On 1/29/07, Alfonso Acosta <alfonso.acosta at gmail.com> wrote:
> 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