#pragma once #include #include "type.hpp" struct type_error : std::exception { std::string description; type_error(std::string d) : description(std::move(d)) {} const char* what() const noexcept override; }; struct unification_error : public type_error { type_ptr left; type_ptr right; unification_error(type_ptr l, type_ptr r) : left(std::move(l)), right(std::move(r)), type_error("failed to unify types") {} };