move evaluation logic into evaluation.go