module Scientist.NamedCandidate ( NamedCandidate , namedCandidate , namedCandidateName , runNamedCandidate ) where import Prelude import Control.Monad.IO.Unlift (MonadUnliftIO) import Data.Text (Text) import Scientist.Candidate import UnliftIO.Exception (SomeException, tryAny) data NamedCandidate m a = NamedCandidate Text (m (Candidate a)) namedCandidate :: Text -> m (Candidate a) -> NamedCandidate m a namedCandidate :: Text -> m (Candidate a) -> NamedCandidate m a namedCandidate = Text -> m (Candidate a) -> NamedCandidate m a forall (m :: * -> *) a. Text -> m (Candidate a) -> NamedCandidate m a NamedCandidate namedCandidateName :: NamedCandidate m a -> Text namedCandidateName :: NamedCandidate m a -> Text namedCandidateName (NamedCandidate Text x m (Candidate a) _) = Text x runNamedCandidate :: MonadUnliftIO m => NamedCandidate m a -> m (Either SomeException a) runNamedCandidate :: NamedCandidate m a -> m (Either SomeException a) runNamedCandidate (NamedCandidate Text _ m (Candidate a) f) = m a -> m (Either SomeException a) forall (m :: * -> *) a. MonadUnliftIO m => m a -> m (Either SomeException a) tryAny (m a -> m (Either SomeException a)) -> m a -> m (Either SomeException a) forall a b. (a -> b) -> a -> b $ Candidate a -> a forall a. Candidate a -> a unCandidate (Candidate a -> a) -> m (Candidate a) -> m a forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> m (Candidate a) f