sketched out the initial API. Still very likely to change at this point as I write some tests for example usage.