Haskell / Измерение объёмов при помощи двух заданных сосудов: решение на языке Haskell

В марте ставший уже традиционным ежемесячный конкурс по функциональному программированию начался второго числа. Всем любителям программирования была предложена следующая задача:

У Вас есть два сосуда, один объёмом 5 литров, а другой объёмом 8 литров. Вы можете наливать сосуды до края какой-то жидкостью (будьте осторожны, возможно, что она едкая или ядовитая) из крана. Вы можете выливать жидкость из сосуда в технологическую раковину. Вы можете переливать жидкость из сосуда в сосуд так, что либо в первом сосуде закончится жидкость, либо второй наполнится до краёв (что произойдёт ранее). Ваша задача — отмерить 2 литра жидкости.