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.