{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Data.Morpheus.Ext.Failure
( Failure (..),
)
where
import Relude
class Applicative f => Failure error (f :: * -> *) where
failure :: error -> f v
instance Failure error (Either error) where
failure :: error -> Either error v
failure = error -> Either error v
forall error v. error -> Either error v
Left
instance (Monad m, Failure errors m) => Failure errors (ReaderT ctx m) where
failure :: errors -> ReaderT ctx m v
failure = m v -> ReaderT ctx m v
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m v -> ReaderT ctx m v)
-> (errors -> m v) -> errors -> ReaderT ctx m v
forall b c a. (b -> c) -> (a -> b) -> a -> c
. errors -> m v
forall error (f :: * -> *) v. Failure error f => error -> f v
failure