package mem type CellKind int const ( CellKindEmpty CellKind = iota CellKindString CellKindArray CellKindObject CellKindType CellKindEnv CellKindOutlet CellKindForbidden ) func (c CellKind) String() string { switch c { case CellKindEmpty: return "empty" case CellKindString: return "string" case CellKindArray: return "array" case CellKindObject: return "object" case CellKindType: return "type" case CellKindEnv: return "env" case CellKindOutlet: return "outlet" case CellKindForbidden: return "forbidden" default: return "unknown" } } type cell struct { kind CellKind refs int data CellData } type CellData interface { DropCell(Mem) MatchingCellKind() CellKind }