я кстати про функтор пока читал у меня в голове ассоциация прошла на примере переупаковок чего-либо по характерным свойствам, странно наверное, но мне просто интересно, насколько это правильная ассоциация. Например есть много инстансов какого-то класса (пусть инстансы гриба лисички) их можно упаковать в список/корзину/пакет/коробку по какому-то единому признаку, пусть по размеру шляпки. А можно упаковать в пакет по размеру ножки, а еще можно упаковать в пакет по изгибу ножки. Выходит три характеристических свойства: размер шляпки, размер ножки, изгиб ножки. Сами по себе лисички - не функтор, но если для них придумать функцию которая из пакета лисичек упакованных по размеру шляпки перепакует их в пакет лисичек по изгибу ножки, то класс лисичек станет функтором. Меня волнует одно: обязательно ли иметь какое-то характереное свойство, так чтобы например при переупаковке из размера шляпки в изгиб ножки я мог сделать обратное преобразование из изгиба ножки снова в размер шляпки? Например я могу промапить список лисичек вообще во что-то невообразимое, но верно ли то, что мап должен быть двусторонний, чтобы из непонятно чего вереуться вновь в исходное состояние?
На гриб можно смотреть как на кортеж, например пара (шляпка, ножка). И она вполне себе является функтором, причем можно сделать как по первому аргументу (маппим ножки), так и по второму (маппим шляпки). Не уверен правда что так понятнее будет