классов типов Для этих данных:Haskell: Преобразование между
data A = A
data B = B
class C1 a where repr :: a -> String
instance C1 A where repr _ = "A"
instance C1 B where repr _ = "B"
class C2 a
instance C2 A
Есть ли способ, чтобы реализовать функцию с этим типом?
conv :: (C1 a, C2 b) => a -> Maybe b
Она должна возвращать Just . id
для аргумента типа, который является экземпляром C2
и Nothing
для любого другого типа.
repr
является инъективным. Я могу изменить класс C2
, но класс C1
находится в внешней библиотеке.
Пожалуйста, будьте более конкретными. Не упрощайте проблему. Как и в настоящее время, этот вопрос представляется экземпляром проблемы [XY] (http://xyproblem.info/). –
Я не вижу никакого упрощения. Пример довольно конкретный, и вопрос в основном да/нет. Если это невозможно сделать, что мне нужно, ответьте, что это не так, и я буду благодарен, если вы объясните, почему. –
Проблема с вашим вопросом заключается в том, что вы спрашиваете о своем __attempted решении__ вместо вашей __actual problem__. У вас есть проблема, для которой вы хотите получить решение, и вы уже подумали о решении (в вашем случае реализации функции conv). Следовательно, вы спрашиваете, можно ли реализовать функцию conv. Однако, если вы сообщите нам свою реальную проблему (ту, которую вы пытаетесь решить, реализуя функцию conv), мы можем дать вам лучший ответ. Следовательно, это упрощение проблемы __actual__, которую вы имеете. Просто пытаюсь помочь здесь бесплатно. –