blob: 5bbfa513228e2d804e813ebde1323a37391f8c7f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
{-# LANGUAGE NoMonomorphismRestriction #-}
import Control.Monad.ST
import Control.Monad.ST.Unsafe
import Data.VCDIFF
import qualified Data.ByteString as B
step2 = undefined
step1 = do
xs <- unsafeInterleaveST $ step2
return $ 3 : xs
test f = do
xs <- f $ step2
return $ 3 : xs
test2 f = withByteString B.empty $ \_ _ -> do
xs <- f $ step2
return $ 3 : xs
main = do
let xs = runST step1
ys = runST (test id)
zs = runST (test unsafeInterleaveST)
vs = runST (test2 unsafeInterleaveST)
print $ take 1 xs
-- print $ take 1 ys
print $ take 1 zs
print $ take 1 vs
|