[Haskell-cafe] ST Monad - what's wrong?
mnislaih at gmail.com
Sun Dec 9 08:39:38 EST 2007
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 ($).
On 09/12/2007, at 12:11, Nicu Ionita wrote:
> 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.
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
More information about the Haskell-Cafe