Place the fish in a shallow pan with the onion, milk and water and bring to the boil. Reduce the heat, cover the pan and poach gently for about 10 minutes.
Strain the ﬁsh liquid through a large sieve into a saucepan and reserve, discarding the onion. Remove the skin and bones from the fish, ﬂake the ﬂesh and set aside.
Meanwhile, boil the potatoes in salted water for 10–15 minutes or until tender. Drain and mash well. Whisk the mashed potatoes into the ﬁsh liquid, stir in the leek and bring to the boil. Reduce the heat, cover the pan and simmer for 10–15 minutes, or until the leek is tender.
Whisk the cream and egg yolk together and stir into the soup. Reheat gently, stirring until slightly thickened. Do not boil or the soup will curdle. Stir in the ﬂaked fish and season to taste with pepper only. Stir in the chopped parsley and heat through for 2–3 minutes.
Serve the soup piping hot in warmed bowls. If desired, dot with knobs of butter that melt and run over the surface of the soup.