Skip to content

Support Any as an alias for object to describe a default typeclass implementation #307

Open
@anatoly-scherbakov

Description

@anatoly-scherbakov

Context. In order to define a default implementation (the one used if no other implementation matches), we currently have to write something like this:

from classes import typeclass

@typeclass
def render(data_value) -> str:
    """Render a data value nicely."""

@render.instance(int)
def _render_int(data_value: int) -> str:
    return f'This is an integer: {data_value}'


@render.instance(object)
def _render_int(data_value: object) -> str:
    return f'No idea what this is: {data_value}'


assert render('BADOOM') == 'No idea what this is: BADOOM'

(this script should be runnable as-is.)

Decision. Support Any as a special case to replace object:

@render.instance(Any)
def _render_int(data_value: Any) -> str:    # type: ignore
    return f'No idea what this is: {data_value}'

Consequences.

  • Pro: The code will look a little bit more straightforward;
  • Contra: mypy with common settings might be unhappy about Any being used, but that can be silenced with type: ignore I suppose.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions