В общем, я бы сказал, нет, это невозможно.Однако, если вы пытаетесь решить практическую проблему разворачивания и обертывания повсеместно (особенно часто встречается в новых типах), я часто определяю функцию mapf f (Type val) = Type (f val)
, аналогичную fmap, а затем не экспортирую ее.Вы можете сделать то же самое для n-арного типа данных, просто передав больше функций.Если реализация не должна быть секретной, вы также можете экспортировать ее (как fmap для унарных).Я рекомендую этот тип функции карты или представления для сложных типов, потому что сопоставление с образцом свяжет вас с реализацией.
В базовых типах такие функции уже определены, например, maybe
и either
.