1 {-# LANGUAGE MagicHash, BangPatterns #-}
7 import System.Environment
15 args <- map length `fmap` getArgs
17 (l ++ l2 ++ args) `deepseq` return ()
19 let x = l ++ l2 ++ args
21 cl <- getClosureData l
22 case cl of ConsClosure {} -> return ()
23 unless (name cl == ":") $ do
26 cl <- getClosureData l2
27 case cl of ConsClosure {} -> return ()
28 eq <- areBoxesEqual (ptrArgs cl !! 1) (asBox l)
30 fail "Doesnt reference l"
32 cl <- getClosureData args
33 unless (tipe (info cl) == CONSTR_NOCAF_STATIC) $ do
34 fail "Not a CONSTR_NOCAF_STATIC"
36 cl <- getClosureData x
37 unless (tipe (info cl) == THUNK_2_0) $ do
38 fail "Not a THUNK_2_0"
41 let !(I# m) = length args + 42
42 let !(I# m') = length args + 23
43 let f = \x n -> take (I# m + I# x) n ++ args
46 cl <- getClosureData f
47 unless (tipe (info cl) == FUN_1_1) $ do
49 unless (dataArgs cl == [42]) $ do
51 cl <- getClosureData t
52 unless (tipe (info cl) == THUNK) $ do
54 unless (dataArgs cl == [23]) $ do
56 eq <- areBoxesEqual (ptrArgs cl !! 1) (asBox f)
58 fail "t doesnt reference f"
63 cl <- getClosureData x
64 case cl of ConsClosure {} -> return ()
65 eq <- areBoxesEqual (ptrArgs cl !! 1) (asBox x)
67 fail "x doesnt reference itself"