Добрый день!
Казалось бы, избитая тема, но не дает покоя один вопрос.
Когда речь заходит о паттерне "Посетитель", все говорят что в ФП он не нужен,
потому что паттерн матчинг и вариантные типы устраняют надобность в нем
здесьАвтор: VladD2
Дата: 12.09.06
и
здесьАвтор: Lazy Cjow Rhrr
Дата: 06.01.06
.
Паттерн "Посетитель" выполняет две функции:
1) двойная диспетчеризация (в языках C++/Java/C# и т.п.)
как в этим справляется паттерн матчинг — понятно
2) позволяет переиспользовать логику обхода сложной структуры
а здесь что нам дает паттерн матчинг?
Например, есть AST языка какого то языка, нужно обойти все константные строковые литералы.
При наличии абстрактного посетителя, нужно переопределить метод посещения выражения (VisitExpression) и все.
В ФЯ придется написать большущий match с рекурсией чтобы собрать выражения по всем типам узлов AST.
Если нужно найти все операторы присваивания в коде, опять пишем match на всю структуру.
Дублировать логику обхода структур в порядке вещей для ФП или есть какой то другой подход?