text: from abc import ABC, abstractmethod
  
  class Either(ABC):
    @abstractmethod
    def isLeft(self):
      pass
    @abstractmethod
    def isRight(self):
      pass
    @abstractmethod
    def getLeft(self):
      pass
    @abstractmethod
    def getRight(self):
      pass
    @abstractmethod
    def mapLeft(self, lf):
      pass
    @abstractmethod
    def mapRight(self, rf):
      pass
    @abstractmethod
    def either(self, leftF, rightF):
      pass
  
  class Left(Either):
    def __init__(self, lvalue):
      self.lvalue = lvalue
    def isLeft(self):
      return True
    def isRight(self):
      return False
    def getLeft(self):
      return self.lvalue
    def getRight(self):
      raise Error('Cannot get a right value out of Left.')
    def mapLeft(self, lf):
      return Left(lf(self.lvalue))
    def mapRight(self, rf):
      return Left(self.lvalue)
    def either(self, leftF, rightF):
      return leftF(self.lvalue)
  
  class Right(Either):
    def __init__(self, rvalue):
      self.rvalue = rvalue
    def isLeft(self):
      return False
    def isRight(self):
      return True
    def getLeft(self):
      raise Error('Cannot get a left value out of Right.')
    def getRight(self):
      return self.rvalue
    def mapLeft(self, lf):
      return Right(self.rvalue)
    def mapRight(self, rf):
      return Right(rf(self.rvalue))
    def either(self, leftF, rightF):
      return rightF(self.rvalue)
  