used marked types for type checking