actually two accessor functinons first() and last(), which automatically pick a proper implementation, either by iteration or by direct access