struct _String { u8[] cs; new _String={ u8[] b -> cs=b; }; int _hashCode; }; val _equals = { !_String !self, !_String s -> if( self == s ) return true; if( self.cs# != s.cs# ) return false; for( int i=0; i< self.cs#; i++ ) if( self.cs[i] != s.cs[i] ) return false; return true; }; val _hashCode = { !_String self -> self._hashCode ? self._hashCode : (self._hashCode = _hashCodeString(self)); }; val _hashCodeString = { !_String self -> int hash=0; if( self.cs ) { for( int i=0; i< self.cs#; i++ ) hash = hash*31 + self.cs[i]; } if( !hash ) hash = 123456789; return hash; }; !_String !s = new _String(new u8[17]); s.cs[0] = 67; // C s.cs[1] = 108; // l _hashCode(s);