classdef Function < handle
    properties
        fn
        ast
        env
        params
        is_macro = false;
        meta = type_utils.nil;
    end
    methods
        function f = Function(fn, ast, env, params)
            f.fn = fn;
            f.ast = ast;
            f.env = env;
            f.params = params;
        end

        function ret = clone(obj)
            ret = types.Function(obj.fn, obj.ast, obj.env, obj.params);
            ret.is_macro = obj.is_macro;
            ret.meta = obj.meta;
        end
    end
end
