Add to .gitignore
Cleanup to satisfy hlint and -Wall
Use StateT for simpler state management