For the sauce, combine the oil, onion, ginger, chilli, garlic, tomatoes, apple, banana, curry powder and garam masala in a food processor and blitz to a paste. Pour this into a saucepan and cook on a medium-high heat, stirring often, until the mixture begins to caramelise and the spices become aromatic. Add the stock and bring to the boil.
Meanwhile, melt the butter in a separate saucepan and whisk in the flour. Cook on a low heat for about eight minutes, stirring constantly, until the roux thickens and turns a golden brown colour.
Ladle the curry mixture from the other pan into the roux, a little at a time, whisking constantly to incorporate. Add the ketchup and soy sauce.
Cook the mixture until it’s quite thick, then transfer to a blender or use an immersion blender to purée until very smooth. Taste and adjust the seasoning with salt.
Place the onion, carrots and potatoes in a saucepan and cover with water. Bring to the boil, add the cauliflower and reduce to a simmer.
Cook for about 10 minutes, until everything is tender. Drain and return to the pan, and pour in the curry sauce. Bring everything back to a simmer and serve with the rice.