Famílias de tipo fechado e tipos de função estranhos

Desculpe, eu não conseguia imaginar um título melhor para a pergunta, então leia adiante. Imagine que temos uma família de tipos fechados que mapeia todos os tipos correspondentesMaybe exceto os próprios talvez:

type family Family x where
  Family (Maybe x) = Maybe x
  Family x = Maybe x

Podemos até declarar uma função usando esse tipo de família:

doMagic :: a -> Family a
doMagic = undefined

exampleA = doMagic $ Just ()
exampleB = doMagic $ ()

Brincar com ele no GHCi mostra que não há problema em avaliar o tipo desse aplicativo de função:

*Strange> :t exampleA      
exampleA :: Maybe ()       
*Strange> :t exampleB      
exampleB :: Maybe ()       

A questão é se é possível fornecer alguma implementação dodoMagic função excetoundefined? Digamos, por exemplo, que eu gostaria de agrupar todos os valores em umJust construtor, exceto Maybes, que deve permanecer intacto, como eu poderia fazer isso? Tentei usar classes tipográficas, mas não consegui escrever uma assinatura compilável para a função doMagic se não estiver usando famílias de tipos fechados, alguém poderia me ajudar?

questionAnswers(2)

yourAnswerToTheQuestion