def dispatch(obj: B, tpes: typing.List[A], prefix: str, default: Callable[[A], R] = None) -> Callable[[A], R]: @singledispatch def main(o: A, *a: Any, **kw: Any) -> R: if default is None: msg = 'no dispatcher defined for {} on {} {}' raise TypeError(msg.format(o, obj.__class__.__name__, prefix)) else: return default(o, *a, **kw) for tpe in tpes: fun = getattr(obj, '{}{}'.format(prefix, snake_case(tpe.__name__))) main.register(tpe)(fun) return main
def _infer_implicits(name: str) -> Tuple[str, str]: snake = snake_case(name) return 'amino.instances.{}'.format(snake), '{}Instances'.format(name)
def infer_implicits_module(name: str) -> str: snake = snake_case(name) return 'amino.instances.{}'.format(snake)