A instância aplicável para MaybeT m assume Monad m

Eu tenho usado oHaxl&nbsp;mônada (descrita aqui:http://www.reddit.com/r/haskell/comments/1le4y5/the_haxl_project_at_facebook_slides_from_my_talk), que tem o recurso interessante que<*>&nbsp;para sua instância Aplicativa não é o mesmo queap&nbsp;do Control.Monad. Esse é um recurso essencial que permite realizar cálculos simultâneos sem bloquear. Por exemplo, sehf&nbsp;eha&nbsp;são cálculos longos, então

let hf :: Haxl (a -> b) = ...
    ha :: Haxl a = ...
in do
  f <- hf
  a <- ha
  return (f a)

fará sequencialmente, enquanto

hf <*> ha

irá fazê-los em paralelo e depois combinar os resultados.

Eu gostaria de poder executar cálculos emMaybeT Haxl, mas o problema é que a instância Aplicative paraMaybeT m&nbsp;no pacote transformadores usa ligação monádica:

instance (Functor m, Monad m) => Applicative (MaybeT m) where
    pure = return
    (<*>) = ap

Ondeap = liftM2 id&nbsp;é deControl.Monad. Isto faz

let hmf :: MaybeT Haxl (a -> b) = ...
    hma :: MaybeT Haxl a = ...
in hmf <*> hma

executar sequencialmente. Parece que um exemplo melhor seria mais

instance (Applicative m) => Applicative (MaybeT m) where
    pure = MaybeT . pure . Just
    MaybeT f <*> MaybeT x = MaybeT $ (<*>) <$> f <*> x

(Aqui,(<*>)&nbsp;no lado direito é para oMaybe&nbsp;mônada, enquanto o não parênteses<*>&nbsp;no lado direito é param.) Observe que o contexto é diferente - a instância acima assume apenasApplicative m, enquanto a instância em transformadores assumeFunctor m, Monad m.

Minha principal pergunta é prática: o que devo fazer sobre isso? Devo rolar meu próprioMaybeT&nbsp;transformador de mônada? Existe alguma maneira de contornar a reclamação "Declarações de instância duplicada" que o ghc me fornece se eu tentar escrever o acima?

Eu também gostaria de saber: a configuração atual é uma falha de design no pacote de transformadores? Se não, por que não?