[Haskell-cafe] netwire example error message

briand at aracnet.com briand at aracnet.com
Sun Mar 22 06:33:46 UTC 2015


On Sun, 22 Mar 2015 07:15:09 +0100
joachifm at fastmail.fm wrote:

> On Sun, Mar 22, 2015, at 05:57 AM, briand at aracnet.com wrote:
> > The error message:
> > 
> > time.hs:13:8:
> >     No instance for (Show e0) arising from a use of ‘testWire’
> >     The type variable ‘e0’ is ambiguous
> >     Note: there are several potential instances:
> >       instance Show Double -- Defined in ‘GHC.Float’
> >       instance Show Float -- Defined in ‘GHC.Float’
> >       instance (Integral a, Show a) => Show (GHC.Real.Ratio a)
> >         -- Defined in ‘GHC.Real’
> >       ...plus 45 others
> >     In the expression: testWire clockSession_ pos
> >     In an equation for ‘main’: main = testWire clockSession_ pos
> > Failed, modules loaded: none.
> 
> The problem is that `testWire` wants to print the inhibition value but
> has no way of choosing which `Show` instance to use, because the type of
> `e` is left unspecified in your snippet. This is obvious if you look at
> the constraints on `testWire`, but not so obvious from the error
> message. The solution is to fix the inhibition type to `()` (or
> whatever).


I change the type of pos to 

pos :: (HasTime t s, Monad m) => Wire s () m a Float

and that did it.  Also, () could just be Float, or, as you were saying, whatever.

Thank you, thank you !

Brian

p.s. and for the record not my snippet, got it from a blog. i'm guessing it was untested... 


More information about the Haskell-Cafe mailing list