Где поставить код ответственным с извлечением значения из различных функторов
Учитывая функтор и конкретный способ, которым вы хотите развернуть его значение, существует ли предопределенный класс типов, который вы должны реализовать для unwrap
Это?
Например, учитывая тип: data X = X Int Int
где я могу специализироваться unwrapping
из Maybe X
?
Допустим, у меня есть a = Just (X 2 3)
и я хочу unwrap
это по-особенному:
(Just 2 3)-> 2^3
Nothing -> 0
Но я также хочу использовать тот же метод / интерфейс для unwrap
другой тип как Maybe (Int,Int)
лайк:
Just (x, y) -> x + y
Nothing -> 0
Вопрос больше в организации:
Есть ли метод класса типов, где я могу реализовать для распаковки Maybe X
,Maybe Y
, Either Z
, Either K
, так далее.?
Или я должен предоставить разгруппированные (не экземпляр метода класса типов) для каждого типа, который я хочу развернуть из функтора?