[Haskell-cafe] ST Monad - what's wrong?

pepe 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 ($).

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 at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list