#include "FunTy.hpp" namespace roza { /*explicit*/ FunTy::FunTy() : Type(TY_FUN) { } /*virtual*/ FunTy::~FunTy() { } void FunTy::add_input(std::shared_ptr ty) { m_inputs.push_back(ty); } void FunTy::set_output(std::shared_ptr ty) { m_output = ty; } std::string FunTy::string() const /*override*/ { std::stringstream ss; ss << "FUN"; ss << "<"; if (m_inputs.empty() && m_output->base() == TY_NIL) { ss << ">"; return ss.str(); } std::string sep; for (auto ty: m_inputs) { ss << sep << ty->string(); sep = " -> "; } ss << " -> " << m_output->string(); ss << ">"; return ss.str(); } bool FunTy::equals(BaseType base_type) const /*override*/ { return base_type == TY_FUN; } bool FunTy::equals(Type const&) const /*override*/ { return false; } }