We support other dry-python projects.
This project is designed to work together with returns:
from classes import typeclass
from returns.result import Result
@typeclass
def result_to_str(instance) -> str:
"""This is a typeclass definition to convert Result container to str."""
@result_to_str.instance(Result.success_type)
def _result_to_str_success(instance: Result) -> str:
"""The sad part is that we cannot make this case generic..."""
return str(instance.unwrap()) # will always receive `Success` types
@result_to_str.instance(Result.failure_type)
def _result_to_str_failure(instance: Result) -> str:
"""But we can still use cases to work with top-level types!"""
return str(instance.failure()) # will always receive `Failure` types
Combining classes and returns allows you
to write typed and declaratice business logic
without almost any isintance calls.
It also helps you with the value unwrapping from the Result container.