 	var end: Index? {
 		return analysis(
 			ifEnd: unit,
-			ifRecursive: const(nil))
+			ifRecursive: const(nil),
+			ifArgument: const(nil))
 	}
 
 	var recursive: (Index, Description)? {
 		return analysis(
 			ifEnd: const(nil),
-			ifRecursive: unit)
+			ifRecursive: unit,
+			ifArgument: const(nil))
 	}
 
 


	case End(Box<Index>)
	case Recursive(Box<Index>, Box<Description>)
}




	public func analysis<T>(
		@noescape #ifEnd: Index -> T,
		@noescape ifRecursive: (Index, Description) -> T,
		@noescape ifArgument: (Index, Any -> Description) -> T) -> T {
		switch self {
		case let .End(index):
			return ifEnd(index.value)
		case let .Recursive(index, description):
			return ifRecursive(index.value, description.value)
		case let .Argument(index, argument):
			return ifArgument(index.value, argument)
		}
	}

