enter_module( typecheck );
type_check( char* type_name, LIST *values, FRAME* caller, RULE* called, LIST* arg_name ){    static module *typecheck = 0;    /* if nothing to check, bail now */    if ( !values || !type_name )        return;    if ( !typecheck )        typecheck = bindmodule(".typecheck");    /* if the checking rule can't be found, also bail */    {        RULE checker_, *checker = &checker_;        checker->name = type_name;        if ( !typecheck->rules || !hashcheck( typecheck->rules, (HASHDATA**)&checker ) )            return;    }        while ( values != 0 )    {        LIST *error;        FRAME frame[1];        frame_init( frame );        frame->module = typecheck;        frame->prev = caller;                /* Prepare the argument list */        lol_add( frame->args, list_new( L0, values->string ) );        error = evaluate_rule( type_name, frame );                if ( error )            argument_error( error->string, called, caller, arg_name );                frame_free( frame );		values = values->next;    }}