I have a haskell file that can produce random numbers for a tuple. This is the file:

module RandomTuple where

import System.Random

instance (Random a, Random b) => Random (a, b) where

randomR ((x1, y1), (x2, y2)) gen1 = ((x, y), gen3)

where (x, gen2) = randomR (x1, x2) gen1

(y, gen3) = randomR (y1, y2) gen2

random g0 = ((x1,y1), g2)

where (x1, g1) = random g0

(y1, g2) = random g1

This code compiles and runs fine with cabal run. But Haskell for Mac reports 2 errors with it:

No instance for (Random t0)

The type variable ‘t0’ is ambiguous

When checking that ‘g1’ has the inferred type

g1 :: g

Probable cause: the inferred type is ambiguous

In an equation for ‘random’:

random g0

= ((x1, y1), g2)

where

(x1, g1) = random g0

(y1, g2) = random g1

In the instance declaration for ‘Random (a, b)’

And then on the next line it reports this error:

Could not deduce (RandomGen t0)

from the context (Random t)

bound by the inferred type for ‘y1’: Random t => t

at /Users/Paul/Documents/Poisson.hsproj/RandomTuple.hs:11:11-30

The type variable ‘t0’ is ambiguous

When checking that ‘y1’ has the inferred type

y1 :: forall t. Random t => t

Probable cause: the inferred type is ambiguous

In an equation for ‘random’:

random g0

= ((x1, y1), g2)

where

(x1, g1) = random g0

(y1, g2) = random g1

In the instance declaration for ‘Random (a, b)’

Could not deduce (Random t0)

from the context (RandomGen t)

bound by the inferred type for ‘g2’: RandomGen t => t

at /Users/Paul/Documents/Poisson.hsproj/RandomTuple.hs:11:11-30

The type variable ‘t0’ is ambiguous

When checking that ‘g2’ has the inferred type

g2 :: forall t. RandomGen t => t

Probable cause: the inferred type is ambiguous

In an equation for ‘random’:

random g0

= ((x1, y1), g2)

where

(x1, g1) = random g0

(y1, g2) = random g1

In the instance declaration for ‘Random (a, b)’

No instance for (Random t0)

The type variable ‘t0’ is ambiguous

When checking that ‘g2’ has the inferred type

g2 :: g

Probable cause: the inferred type is ambiguous

In an equation for ‘random’:

random g0

= ((x1, y1), g2)

where

(x1, g1) = random g0

(y1, g2) = random g1

In the instance declaration for ‘Random (a, b)’

What the heck is going on? why is this code fine when I compile it and run it but not when the IDE reads it?