El problema del granjero, la oveja y la col en Haskell

Recientemente, Justin Le ha publicado el artículo Wolf, goat, cabbage: The list MonadPlus & logic problems en el que explica cómo se pueden usar las mónadas para resolver el problema del granjero, el lobo, la oveja y la col. El enunciado de dicho problema es el siguiente

Un granjero fue al mercado y compró un lobo, una oveja y una col. Para volver a su casa tenía que cruzar un río. El granjero dispone de una barca para cruzar a la otra orilla, pero en la barca solo caben él y una de sus compras. Además, si el lobo se queda solo con la cabra se la come y si la cabra se queda sola con la col se la come.

El reto del granjero era cruzar él mismo y dejar sus compras a la otra orilla del río, dejando cada compra intacta. ¿Cómo lo hizo?

A partir del artículo, he elaborado la siguiente relación de ejercicios (para la asignatura de Informática de 1º del Grado en Matemáticas y para la siguiente versión del libro Piensa en Haskell). En ella se incluyen soluciones sin usar mónadas y con mónadas (concretamente, los ejercicios 12, 15 y 17).

La relación de ejercicios y sus soluciones es la siguiente