Задачка детям. Есть односторонний коридор, в нем n=7 дверей. За одной из дверей находится ценный кот. В один момент времени мы можем открыть одну дверь. Если там кот - мы его поймали, если нет - мы закрываем дверь, а кот переходит в одну из соседних комнат к той, в которой он находился. Надо поймать кота.
Кот может находится в некотором множестве комнат (множество задается тимом RoomsSet). Комната, в которую бы можем заглянуть имеет тип Room.
Если мы не нашли кота за дверью, множество его возможных местонахождений изменяется.
Надо написать функкию look :: RoomsSet -> Room -> RoomsSet и, поинравшись с ней, найти последовательность действий, после которой коту прятаться негде (множество его местонахождений пусто).
Играться можно в REPL, написать интерактивную программу или даже GUI.