Т.е. где-то когда-то у меня щёлкнуло именно насчёт моноидов и монад.
Типа моноид берёт пару элементов и склеивает в один, либо предоставляет какой-то тривиальный элемент.
И вот посмотрев на этот инстанс монады для (->) R, у меня тоже щёлкнуло.
>>= берёт пару использований R и склеивает в одно, а return берёт просто элемент и добавляет к нему какое-то тривиальное использование R
И всё остальное сложилось после этого щелчка