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.
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).