{-# LANGUAGE FlexibleContexts #-}
module Data.Either.Located
  ( module Data.Either
  , fromRight, fromLeft
  ) where

import Data.Either
import qualified GHC.Err.Located as L

fromRight :: L.HasCallStack
          => Either a b -> b
fromRight (Right x) = x
fromRight (Left _)  = L.error "Either.fromRight: Left"

fromLeft :: L.HasCallStack
         => Either a b -> a
fromLeft (Left x)  = x
fromLeft (Right _) = L.error "Either.fromLeft: Right"