Part 0. Package might need to be installed:
stack install parallel

Part 1. Ip frequency count
compile: 
stack ghc -- --make -O2 ipFreq -rtsopts -threaded -eventlog
run with performance test:
./ipFreq access.log.txt +RTS -s -Nx
x is the cores you want to use

Part 2. 8-puzzle solver
compile:
stack ghc -- --make -O2 puzzleSolver -rtsopts -threaded -eventlog
run with performance test:
./puzzleSolver +RTS -s -Nx
x is the cores you want to use
Note that it runs on 1000 problems, you can modify "take 1000" to try different number of 
problems, but it will be slow to run too many problems.

For both sequential version, replace the target name with ipSeq and puzzleSeq

Part 3. Test 8-puzzle correctness
Use stack ghci to open the haskell command line. :l puzzle.hs
test with solveDebug l, where l is a list like [1,2,3,4,0,5,6,7,8]
the output is for each step, what number is swapped with 0.
