@@ -0,0 +1,76 @@
1+module SmallCtorBench where
2+
3+type ManyCtors =
4+ MyLongNamedCtor1 Float Float Float
5+ | MyLongNamedCtor2 Float Float
6+ | MyLongNamedCtor3 Float Float Float
7+ | MyLongNamedCtor4 Float Float
8+ | MyLongNamedCtor5 Float Float Float
9+ | MyLongNamedCtor6 Float Float
10+ | MyLongNamedCtor7 Float Float Float
11+ | MyLongNamedCtor8 Float Float
12+ | MyLongNamedCtor9 Float Float Float
13+ | MyLongNamedCtor10 Float Float
14+
15+
16+getFieldSum someData =
17+ case someData of
18+ MyLongNamedCtor1 x y z ->
19+ x + y + z
20+
21+ MyLongNamedCtor3 x y z ->
22+ x + y + z
23+
24+ MyLongNamedCtor5 x y z ->
25+ x + y + z
26+
27+ MyLongNamedCtor7 x y z ->
28+ x + y + z
29+
30+ MyLongNamedCtor9 x y z ->
31+ x + y + z
32+
33+ MyLongNamedCtor10 x y ->
34+ x + y
35+
36+ MyLongNamedCtor8 x y ->
37+ x + y
38+
39+ MyLongNamedCtor6 x y ->
40+ x + y
41+
42+ MyLongNamedCtor4 x y ->
43+ x + y
44+
45+ MyLongNamedCtor2 x y ->
46+ x + y
47+
48+
49+makeRandomData i =
50+ case (i % 10) of
51+ 0 ->
52+ MyLongNamedCtor10 (toFloat i) (toFloat <| i*i)
53+ 1 ->
54+ MyLongNamedCtor1 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
55+ 2 ->
56+ MyLongNamedCtor2 (toFloat i) (toFloat <| i*i)
57+ 3 ->
58+ MyLongNamedCtor3 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
59+ 4 ->
60+ MyLongNamedCtor4 (toFloat i) (toFloat <| i*i)
61+ 5 ->
62+ MyLongNamedCtor5 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
63+ 6 ->
64+ MyLongNamedCtor6 (toFloat i) (toFloat <| i*i)
65+ 7 ->
66+ MyLongNamedCtor7 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
67+ 8 ->
68+ MyLongNamedCtor8 (toFloat i) (toFloat <| i*i)
69+ 9 ->
70+ MyLongNamedCtor9 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
71+
72+
73+
74+sumFieldsList : List ManyCtors -> Float
75+sumFieldsList dataList =
76+ List.foldr (\val sumSoFar -> (getFieldSum val) + sumSoFar ) 0.0 dataList