Нет ли стандартного (Either a) экземпляра монады?

У меня создалось впечатление, что где-то был экземпляр для Either a, но я не могу его найти. Я пробовал импортировать Control.Monad, Control.Monad.Instances и Data.Either, как показано

module Main where

import Control.Monad
import Data.Either
import Control.Monad.Instances

test :: [Either a b] -> Either a [b]
test = sequence

main = return ()

, но ghc сообщает мне, что не может вывести (Monad (Either a)). Добавление

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

заставляет код компилироваться, но это объявление экземпляра кажется настолько общим, что для меня не имеет смысла, если его еще нет в каком-то стандартном модуле. Если да, то где мне его искать, а если нет, то есть ли причина для этого?

-------------- РЕДАКТИРОВАТЬ ----- ----------

Имейте в виду, что теперь я считаю, что ответ пользователя 31708 ниже («Начиная с версии 4.6 экземпляр находится в Data.Either сам.») В настоящее время является правильным ответом. Я не уверен в правильном протоколе переназначения выбранного ответа в этом случае, где выбранный ответ был правильным ответом на тот момент, когда был задан вопрос, поэтому я оставил его как есть. Пожалуйста, поправьте меня, если для этого есть другое руководство.

16
задан Boris 17 August 2015 в 10:54
поделиться