public static void Main(string[] args)
        {
            var info = new EncounteredCollection();
            var seen = new HashSet <Type>(new TypeNameComparer());

            foreach (var t in Ecma335.Types)
            {
                seen.Add(t);
                info.Add(new Encountered {
                    Type = t
                });
            }

            foreach (var t in ToStandarize)
            {
                AddReferencedTypes(t, seen, info);
            }

            var missingTypes = info.Select(e => e.Type).Except(ToStandarize).Except(Ecma335.Types);

            Console.WriteLine("# Missing: {0} Types", missingTypes.Count());
            foreach (var missing in missingTypes)
            {
                Console.WriteLine("Missing: {0}", missing.FullName);
                var e = info [missing];
                foreach (var m in e.At)
                {
                    Console.WriteLine("\tAt: {0}{1} plus {2} others...",
                                      m.DeclaringType == null ? "" : m.DeclaringType.FullName,
                                      m, e.At.Count - 1);
                }
                foreach (var b in e.At.Where(mi => Array.IndexOf(ToStandarize,
                                                                 GetTypeDefinition(mi.DeclaringType)) >= 0))
                {
                    Console.WriteLine("\tBecause: {0}", b.DeclaringType.FullName + "/" + b);
                }
            }
        }