{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies     #-}

module Data.Result
  ( fromEither
  -- * Reexports
  , module Data.Result.Types
  ) where

import           Data.Result.Types
import           Data.WorldPeace

import           Control.Monad.Raise

-- | Upgrade from an 'Either' to a 'Result'
fromEither :: Subset err (OpenUnion errs) => Either err val -> Result errs val
fromEither :: Either err val -> Result errs val
fromEither (Right val
val) = val -> Result errs val
forall val (err :: [*]). val -> Either (OpenUnion err) val
Ok val
val
fromEither (Left  err
err) = OpenUnion errs -> Result errs val
forall (errs :: [*]) b. OpenUnion errs -> Either (OpenUnion errs) b
Err (err -> OpenUnion errs
forall err errs. Subset err errs => err -> errs
include err
err)