Here's a little challenge: take a peak at Xorme.hs, and decide which of 2 implementations (calculateParity1 or calculateParity2), which (assuming the input vectors are of same length) calculate the very same result (according to QuickCheck) is the fastest.
Validate they're similar:
$ stack test
...
Properties
equal: OK (0.03s)
+++ OK, passed 100 tests.
All 1 tests passed (0.03s)
Completed all 2 actions.
Now run a benchmark (I left out the results, of course):
$ stack bench
...
benchmarking calculateParity1
time ----- -- ------ -- .. ----- ---
----- -- ------ -- .. ----- ---
mean ----- -- ------ -- .. ----- ---
std dev ----- -- ------ -- .. ----- ---
benchmarking calculateParity2
time ----- -- ------ -- .. ----- ---
----- -- ------ -- .. ----- ---
mean ----- -- ------ -- .. ----- ---
std dev ----- -- ------ -- .. ----- ---
Benchmark xorme-bench: FINISH
Completed all 2 actions.