Prevent mixed types in arrays
diff --git a/parser.go b/parser.go
index e9c9f52..54750c3 100644
--- a/parser.go
+++ b/parser.go
@@ -4,6 +4,7 @@
 
 import (
 	"fmt"
+	"reflect"
 	"strconv"
 	"time"
 )
@@ -146,6 +147,7 @@
 
 func parseArray(p *parser) []interface{} {
 	array := make([]interface{}, 0)
+	arrayType := reflect.TypeOf(nil)
 	for {
 		follow := p.peek()
 		if follow == nil || follow.typ == tokenEOF {
@@ -156,6 +158,12 @@
 			return array
 		}
 		val := parseRvalue(p)
+		if arrayType == nil {
+			arrayType = reflect.TypeOf(val)
+		}
+		if reflect.TypeOf(val) != arrayType {
+			panic("mixed types in array")
+		}
 		array = append(array, val)
 		follow = p.peek()
 		if follow == nil {
diff --git a/parser_test.go b/parser_test.go
index 629e0a6..1f55faa 100644
--- a/parser_test.go
+++ b/parser_test.go
@@ -142,6 +142,18 @@
 	})
 }
 
+func TestArrayMixedTypes(t *testing.T) {
+	_, err := Load("a = [42, 16.0]")
+	if err.Error() != "mixed types in array" {
+		t.Error("Bad error message:", err.Error())
+	}
+
+	_, err = Load("a = [42, \"hello\"]")
+	if err.Error() != "mixed types in array" {
+		t.Error("Bad error message:", err.Error())
+	}
+}
+
 func TestArrayNestedStrings(t *testing.T) {
 	tree, err := Load("data = [ [\"gamma\", \"delta\"], [\"Foo\"] ]")
 	assertTree(t, tree, err, map[string]interface{}{