#ifndef GOOSE_BUILTINS_TYPES_TEMPLATE_TDECL_H
#define GOOSE_BUILTINS_TYPES_TEMPLATE_TDECL_H
namespace goose::builtins
{
extern void SetupTDeclUnification( Env& e );
extern UniGen UnifyTDecl( const Term& lhs, const Term& rhs, UnificationContext& c );
extern Term BuildArgPatternFromTDecl( const Term& td );
class TDecl
{
public:
template< typename T >
TDecl( T&& type, const StringId& name ) :
m_type( forward< T >( type ) ),
m_name( name )
{}
const auto& type() const { return m_type; }
const auto& name() const { return m_name; }
private:
Term m_type;
StringId m_name;
};
extern bool IsTDecl( const Value& td );
}
namespace goose::ir
{
template<>
struct Bridge< builtins::TDecl >
{
static optional< Term > Domain() { return sema::DomainCompileTime(); }
static const Term& Type();
static Value ToValue( const builtins::TDecl& td );
static optional< builtins::TDecl > FromValue( const Value& v );
};
}
#endif