summaryrefslogtreecommitdiff
path: root/lazy.hs
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