/// <summary>
        /// Converts this type annotation
        /// </summary>
        public T GetValue <T>(TypeAnnotationConverter <T> converter) where T : class
        {
            var walker = new Walker(ParseSubExpression);

            Expression.Walk(walker);
            return(walker.GetResult(converter));
        }
            public T GetResult <T>(TypeAnnotationConverter <T> converter) where T : class
            {
                var stack = new Stack <KeyValuePair <string, T> >();

                try {
                    foreach (var op in _ops)
                    {
                        if (!op.Apply(converter, stack))
                        {
                            return(default);
 public static TypeAnnotation FromType <T>(TypeAnnotationConverter <T> converter, T type) where T : class
 => throw new NotImplementedException();