Haskell: Convertendo entre classes de tipos
Para esses dados:
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
Existe uma maneira de implementar a função com esse tipo?
conv :: (C1 a, C2 b) => a -> Maybe b
Deve retornarJust . id
para argumento do tipo que é uma instância deC2
eNothing
para qualquer outro tipo.
repr
é injetivo. Eu posso mudar de classeC2
mas classeC1
está na biblioteca externa.