@spec call( {atom(), any()}, [any()] ) :: {any(), any()}
@spec sanitize(atom() | tuple(), any()) :: any()
@spec validate_pattern(module(), [any()], any()) :: any()