{-# LANGUAGE DataKinds       #-}
{-# LANGUAGE KindSignatures  #-}
{-# LANGUAGE PatternSynonyms #-}

module Data.Result.Types
  ( Result
  , pattern Ok
  , pattern Err
  ) where

import           Data.Kind
import           Data.WorldPeace

-- | 'Result' is a synonym for 'Either (OpenUnion errs) a'
type Result (errs :: [Type]) = Either (OpenUnion errs)

pattern Ok :: val -> Either (OpenUnion err) val
pattern Ok val = Right val

pattern Err :: OpenUnion errs -> Either (OpenUnion errs) b
pattern Err errs = Left errs