Heat the olive oil in a pan over medium heat. Add the onion, garlic, and carrot and cook until soft. Add the lamb and beef stock and cook until the meat is brown and has a crumbly texture. Stir in the tomatoes, tomato puree, and corn flour. Simmer, stirring occasionally, for about 15 minutes or until thickened.
Peel and chop the potatoes, toss in a large pot and cover with water. Bring to a boil over medium heat and cook until soft. Drain and add them back to the pot. Mash with a potato masher, stir in the butter, and season to taste with salt and pepper.
Set broiler to low.
Put the filling into a deep baking dish, top with mashed potatoes and put under the broiler until the top is brown and crisp.