same as previous example, but now also with type specializations for the adaptor implementation function