Про семантику опять ничего не понял. Реализация через монаду не устраивает тем, что ap ведет себя не так, как (<*>). Они должны быть эквивалентны? Почему?