function isRecastable(ext) { return extToFunction[ext] ? true : false; }
function composeFunction(flist) {
    if (flist.length === 0) return function identity(data) { return VOW.kept(data); };
    else if (flist.length === 1) return flist[0];
    else if (flist.length === 2) return function(data) {
        return flist[0](data).when(
            flist[1]
        );
            
    };
    else if (flist.length === 3) return function(data) {
        return flist[0](data).when(
            flist[1]
        ).when(
            flist[2]
        );
            
    };
    else if (flist.length === 4) return function(data) {
        return flist[0](data).when(
            flist[1]
        ).when(
            flist[2]
        ).when(
            flist[3]
        );
    };
    return function() {
        return VOW.broken("Can't have more than four passes!!!. Shouldn't happen!!!");   
    };
    
    //needs debugging:
    return function(data) {
        function chain(p1, p2) {
            return p1.when(p2);
        }
        if (flist.length === 0) return VOW.kept(data); 
        var promise = flist[0](data);
        var i = 0;
        var max = flist.length -1; 
        while (i<max) promise = chain(promise, flist[i+1]);
        return promise;
    };
    
}