finally implement ::length