@@ -0,0 +1,80 @@
1+module Syntax.Case (benchmark) where
2+
3+import Benchmark exposing (Benchmark, test, suite)
4+import String
5+
6+
7+benchmark : Benchmark.Benchmark
8+benchmark =
9+ suite "case expressions"
10+ [ suite "simple explicit patterns"
11+ [ test "Maybe.withDefault 0 (Just 42)" (withDefault 0 (Just 42))
12+ , test "Maybe.withDefault 0 Nothing" (withDefault 0 Nothing)
13+ , test "isBlack Diamond" (isBlack Diamond)
14+ , test "evaluate basicBoolean" (\_ -> evaluate basicBoolean)
15+ , test "evaluate fancyBoolean" (\_ -> evaluate fancyBoolean)
16+ ]
17+ ]
18+
19+
20+-- 1 Level Deep Patterns
21+
22+withDefault default maybe _ =
23+ case maybe of
24+ Just x ->
25+ x
26+
27+ Nothing ->
28+ default
29+
30+
31+type Suit = Diamond | Heart | Spade | Club
32+
33+
34+isBlack suit _ =
35+ case suit of
36+ Diamond ->
37+ False
38+
39+ Heart ->
40+ False
41+
42+ Spade ->
43+ True
44+
45+ Club ->
46+ True
47+
48+
49+type Boolean
50+ = Tru
51+ | Fls
52+ | And Boolean Boolean
53+ | Or Boolean Boolean
54+ | Not Boolean
55+
56+
57+basicBoolean =
58+ And (Not Fls) Tru
59+
60+
61+fancyBoolean =
62+ Or (Not Tru) (Or Fls (And Tru Tru))
63+
64+
65+evaluate boolean =
66+ case boolean of
67+ Tru ->
68+ True
69+
70+ Fls ->
71+ False
72+
73+ And a b ->
74+ evaluate a && evaluate b
75+
76+ Or a b ->
77+ evaluate a || evaluate b
78+
79+ Not bool ->
80+ not (evaluate bool)