remove ast type.

AST has eval method instead.
diff --git a/ast.go b/ast.go
index aadb89f..b5b3470 100644
--- a/ast.go
+++ b/ast.go
@@ -1,14 +1,7 @@
 package main
 
-type ASTType int
-
-const (
-	ASTAssign ASTType = iota
-	ASTRule
-)
-
 type AST interface {
-	typ() ASTType
+	eval(*Evaluator)
 	show()
 }
 
@@ -22,8 +15,8 @@
 	rhs string
 }
 
-func (ast *AssignAST) typ() ASTType {
-	return ASTAssign
+func (ast *AssignAST) eval(ev *Evaluator) {
+	ev.evalAssign(ast)
 }
 
 func (ast *AssignAST) show() {
@@ -37,8 +30,8 @@
 	cmds []string
 }
 
-func (ast *RuleAST) typ() ASTType {
-	return ASTRule
+func (ast *RuleAST) eval(ev *Evaluator) {
+	ev.evalRule(ast)
 }
 
 func (ast *RuleAST) show() {