Declare que todas as instâncias de uma classe estão em outra classe sem modificar as declarações de classe originais

Existe uma API Crypto.Random dentro do pacote crypto-api que especifica o que significa algo ser um "gerador de números pseudo-aleatórios"

Implementei essa API usando uma instância da classe RandomGen do System.Random, a saber, StdGen:

instance CryptoRandomGen StdGen where
  newGen bs = Right $ mkStdGen $ shift e1 24 + shift e2 16 + shift e3 8 + e4
    where (e1 : e2 : e3 : e4 : _) = Prelude.map fromIntegral $ unpack bs
  genSeedLength = Tagged 4
  genBytes n g = Right $ genBytesHelper n empty g
    where genBytesHelper 0 partial gen = (partial, gen)
          genBytesHelper n partial gen = genBytesHelper (n-1) (partial `snoc` nextitem) newgen
            where (nextitem, newgen) = randomR (0, 255) gen
  reseed bs _ = newGen bs

No entanto, essa implementação é apenas para o tipo StdGen, mas realmente funcionaria para qualquer coisa na classe RandomGen do System.Rando

Existe uma maneira de dizer que tudo no RandomGen é um membro do CryptoRandomGen usando as funções de shim fornecidas? Eu gostaria de poder fazer isso no meu próprio código, sem precisar alterar a fonte de nenhuma dessas duas bibliotecas. Meus instintos seriam mudar a primeira linha para algo como

instance (RandomGen a) => CryptoRandomGen a where

mas isso não parece estar sintaticamente corret

questionAnswers(2)

yourAnswerToTheQuestion