define some opaque types...