Тут идея простая, мы считаем, что у нас есть какая-то абстракция над функциями, что каким-то образом переводит один тип в другой - это как раз тип >-->[_,_].
Мы навешиваем всякие констреинты на этот тип (в духе, что можно эти стрелки композировать, можно их использовать в рекурсии и т.д.) и пытаемся писать программы, которые будут работать для любого типа таких стрелок.
Тогда можно будет поменять семантику программы целиком заменив тип стрелки в программе, и в отличие от всяких монад, стрелки можно достаточно хитро анализировать и оптимизировать до их непосредственного выполнения.