haskell import instance monads either

haskell - ¿No hay una instancia de mónada estándar(ya sea una)?



import instance (4)

Tenía la impresión de que había una instancia para O en algún lugar, pero parece que no puedo encontrarlo. He intentado importar Control.Monad, Control.Monad.Instances y Data.Either como se muestra

module Main where import Control.Monad import Data.Either import Control.Monad.Instances test :: [Either a b] -> Either a [b] test = sequence main = return ()

pero ghc me dice que no pudo deducir (Mónada (O a)). Añadiendo

instance Monad (Either a) where return = Right Right b >>= f = f b Left a >>= _ = Left a

hace que el código se compile, pero esta declaración de instancia parece tan general que no tiene sentido para mí si aún no está disponible en algún módulo estándar. Si es así, ¿dónde debería buscarlo y, si no es así, hay una razón para esto?

-------------- EDIT ---------------

Tenga en cuenta que ahora creo que la respuesta del usuario31708 a continuación ("A partir de la base 4.6, la instancia está en Data.Either.") Es actualmente la respuesta correcta. No estoy seguro del protocolo adecuado para reasignar la respuesta seleccionada en este caso, donde la respuesta seleccionada fue la respuesta correcta en el momento en que se hizo la pregunta, por lo que la he dejado como está. Por favor, corrígeme, si hay otra pauta para esto.


A partir de la base 4.6, la instance está en Data.Either .


Creo que hay algo en Control.Monad.Error - aunque no tengo nada que verificar.


Esta instance se ha agregado en la base 4.3.xx , que viene con ghc 7 . Mientras tanto, puede utilizar la instancia Either directamente o, si está utilizando Either para representar algo que puede fallar, debe utilizar el transformador de mónada ErrorT .


No hay una instancia para Either a de las Either a , pero existe para cada una de las Either String en Control.Monad.Error . (En realidad, es para el Error e => Either e , IIRC).