{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFoldable #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE ViewPatterns #-} module Data.Fail.Types ( Fail(..), pattern Fail , FailT(..) , FIO ) where import qualified Data.Text as T pattern Fail :: String -> Fail a pattern Fail x <- Err (T.unpack -> x) where Fail x = Err (T.pack x) #if (MIN_VERSION_base(4,10,0)) {-# COMPLETE Ok, Fail #-} #endif data Fail a = Err !T.Text | Ok !a deriving (Show, Ord, Eq, Functor, Foldable, Traversable) newtype FailT m a = FailT { unFailT :: m (Fail a) } deriving (Functor) type FIO a = FailT IO a