The typechecker in 6.6.1 gets confused by the ($) and loses track of the 'freeness' of s (the thread variable) . The same code should work fine in 6.8.1, or alternatively in 6.6.1 without the ($).

Cheers
pepe


On 09/12/2007, at 12:11, Nicu Ionita wrote:

Hi,

I'm trying to use the ST monad in order to turn an almost pure function into a pure one: reading a precalculated list of primes into a prime set. But the
following code brings an error:

primes :: Set Integer
primes = runST $ getPrimes "primes10h7.txt"

getPrimes :: String -> (forall s. ST s (Set Integer))
getPrimes file =
   do cont <- unsafeIOToST (readFile file)
      let set = fromList $ map read $ lines cont
      return set

And here is the error:

Couldn't match expected type `forall s. ST s a'
against inferred type `ST s (Set Integer)'
In the second argument of `($)', namely
`getPrimes "primes10h7.txt"'
In the expression: runST $ (getPrimes "primes10h7.txt")
In the definition of `primes':
primes = runST $ (getPrimes "primes10h7.txt")

Compiled with GHC 6.6.1 with extensions activated.

Nicu

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to