namespace meowlang.typechecker; public record StructTypeDescription : TypeDescription { private readonly List<(string Name, TypeId Type)> _members; private readonly Dictionary _memberMap; public Dictionary DebugGetMembers => _memberMap; public StructTypeDescription(List<(string Name, TypeId Type)> members) { _members = members; _memberMap = members.ToDictionary(x => x.Name, x => x.Type); } public TypeId GetTypeForMember(string name) { return _memberMap.TryGetValue(name, out var value) ? value : throw new UnknownStructMemberException(name); } public IReadOnlyList MemberNames => _members.Select(x => x.Name).ToList(); public bool HasMember(string name) => _memberMap.ContainsKey(name); };