def match(self, data: str, *a: Any, **kw: Any) -> Either[str, 'Match']:
return (
Maybe(self.rex.match(data, *a, **kw))
.to_either('`{}` does not match `{}`'.format(data, self.spec)) /
L(Match)(self, _, data)
)