# STATUS: Unfinished

throw new Error "unimplemented"

# require "./Array"

# Type = require "./Type"
# Property = require "./Property"
# steal = require "./internal/steal"

# Collection = Type
# 	name: "Container"
# 	kind: Type


# Collection.Mixin = Mixin
# 	late: (T) ->
# 		containerType = steal T, "containerType"
# 		T::isTypeOf = (values) ->
# 			return false if containerType.isTypeOf values
# 			return false unless @valueTypes.hasTypeOf value for value in values
# 			return true
# 		init = steal type, ""

# ArrayOf = Collection
# 	name: "ArrayOf"
# 	kind: Type
# 	constructor: 

# ArrayOf = Type
# 	mixins: [ContainerMixin]
# 	instance: ->
# 		isTypeOf: (values) ->
# 	props:
# 		containerType: Array
# 		isTypeOf:
# 	spawn:


# ArrayOf = (types...) ->
# 	return Type
# 		name: "ArrayOf"
# 		props:
# 			valueTypes: types
# 			isTypeOf: (values) ->
# 				return false if Array.isTypeOf values
# 				return false unless @valueTypes.hasTypeOf value for value in values
# 				return true
# 			isType: (type) ->
# 				return false unless type.name is @name
# 				for type1 in @valueTypes
# 					hasType = false
# 					for type2 in type.valueTypes
# 						if type1.isType type2
# 							hasType = true
# 							break
# 					return false unless hasType
# 				return true

# module.exports = ArrayOf
