better vows, now accepting functions