try to use an opaque data type