Contact/support | Changelog

wtf.hs

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import Data.List (foldl')

main = print wtf11

--                  apparent space leak?
--                                      interpreted  compiled
wtf1     = max' [1..10^9] `seq` ()     --y           n
wtf1u () = max' [1..10^9] `seq` ()     --y           n

wtf1'     = const () $! max' [1..10^9] --n           n
wtf1'u () = const () $! max' [1..10^9] --n           n

wtf2     = sum' [1..10^9] `seq` ()     --y           n
wtf2u () = sum' [1..10^9] `seq` ()     --y           n

wtf2'     = const () $! sum' [1..10^9] --n           n
wtf2'u () = const () $! sum' [1..10^9] --n           n

wtf3     = sum'' [1..10^9] `seq` ()    --y           n
wtf3u () = sum'' [1..10^9] `seq` ()    --y           n

wtf3'     = const () $! sum'' [1..10^9]--n           n
wtf3'u () = const () $! sum'' [1..10^9]--n           n

wtf4 = last [1..10^9] `seq` ()         --y           n

wtf5 = last (take (10^9) (repeat 1)) `seq` () --y    n
wtf5' = const () $! (last $ take (10^9) $ repeat 1) --y n

wtf6 = last (take (10^9) (repeat ())) `seq` () --n   n
-- WTFFFFFFFFFFFFF
-- 1. main = print wtf6
-- 2. ghc --make
-- 3. ghci
-- 4. :l wtf.hs
-- 5. main
-- 6. space leak?!?!

wtf7  = last (take (10^9) (repeat 'z')) `seq` () --y  n
wtf7' = const () $! last (take (10^9) (repeat 'z')) --n n

wtf8  = last (take (10^9) (repeat undefined)) `seq` () --y n
wtf8' = const () $! last (take (10^9) (repeat undefined)) --n n

wtf9 = last (take (10^9) (repeat Wtf)) `seq` () --y  n

wtf10 = last (take (10^9) (repeat id)) `seq` () --y  n

wtf11 = last (repeat ()) `seq` ()               --n  n

wtf12 = last (map id (repeat ())) `seq` ()      --n  n
-- same phenomenon as in wtf6

wtf13 = last (repeat 1) `seq` ()                --n  n

wtf14 = last (map id (repeat 1)) `seq` ()       --y  n

wtf15 = last (repeat Wtf) `seq` ()              --n  n

wtf16 = last (map id (repeat Wtf)) `seq` ()     --y  n

data Wtf = Wtf

max' :: [Int] -> Int
max' = foldl' max 0

sum' :: [Int] -> Int
sum' = foldl' (+) 0

sum'' :: [Int] -> Int
sum'' = f 0
    where f z []     = z
          f z (x:xs) = let z' = z + x in z' `seq` f z' xs
11:1: Warning: Use camelCase
Found:
wtf1'u () = ...
Why not:
wtf1U () = ...
17:1: Warning: Use camelCase
Found:
wtf2'u () = ...
Why not:
wtf2U () = ...
23:1: Warning: Use camelCase
Found:
wtf3'u () = ...
Why not:
wtf3U () = ...
27:14: Error: Use replicate
Found:
take (10 ^ 9) (repeat 1)
Why not:
replicate (10 ^ 9) 1
28:9: Warning: Redundant $
Found:
const () $! (last $ take (10 ^ 9) $ repeat 1)
Why not:
const () $! last (take (10 ^ 9) $ repeat 1)
28:29: Error: Use replicate
Found:
take (10 ^ 9) $ repeat 1
Why not:
replicate (10 ^ 9) 1
30:14: Error: Use replicate
Found:
take (10 ^ 9) (repeat ())
Why not:
replicate (10 ^ 9) ()
39:15: Error: Use replicate
Found:
take (10 ^ 9) (repeat 'z')
Why not:
replicate (10 ^ 9) 'z'
40:27: Error: Use replicate
Found:
take (10 ^ 9) (repeat 'z')
Why not:
replicate (10 ^ 9) 'z'
42:15: Error: Use replicate
Found:
take (10 ^ 9) (repeat undefined)
Why not:
replicate (10 ^ 9) undefined
43:27: Error: Use replicate
Found:
take (10 ^ 9) (repeat undefined)
Why not:
replicate (10 ^ 9) undefined
45:14: Error: Use replicate
Found:
take (10 ^ 9) (repeat Wtf)
Why not:
replicate (10 ^ 9) Wtf
47:15: Error: Use replicate
Found:
take (10 ^ 9) (repeat id)
Why not:
replicate (10 ^ 9) id