packages feed

scientist-0.0.0.0: library/Scientist/NamedCandidate.hs

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 = NamedCandidate

namedCandidateName :: NamedCandidate m a -> Text
namedCandidateName (NamedCandidate x _) = x

runNamedCandidate
  :: MonadUnliftIO m => NamedCandidate m a -> m (Either SomeException a)
runNamedCandidate (NamedCandidate _ f) = tryAny $ unCandidate <$> f