TODO: - Decide what to do with Matcher and SelfDescribing interfaces - Find better way to expose functions to global scope