Heat the butter in a saucepan, add the onion and fry gently for 5 minutes until softened. Stir the potatoes into the butter and onion then cover and cook for 5 more minutes. Lay the haddock on top, add the bay leaf and stock. Season with salt and pepper and bring to the boil.
Cover and simmer for 30 minutes or until the potatoes are soft. Lift the fish out of the pan with a slotted spoon and transfer to a plate. Discard the bay leaf.
Loosen the bones, if using a Finnan haddock, with a small knife, then lift away the backbone and head. Using a knife and fork break the fish into flakes and lift off the skin. If using haddock fillet, simply peel off the skin and then break the fish into flakes, double-checking there are no bones. Return two thirds of the fish to the pan then purée the soup in batches in a blender or food processor until smooth. Pour back into the saucepan and stir in the milk and cream. Bring just to the boil, then simmer gently until reheated. Taste and adjust the seasoning if needed.
Ladle into bowls, sprinkle with the remaining fish and the chopped parsley. Serve with toasted barley bannocks or soda griddle scones.