packages feed

quick-process-0.0.1: src/System/Process/Quick/Predicate.hs

module System.Process.Quick.Predicate where

import Control.Monad.Writer.Strict
import System.Process.Quick.Prelude

refinErr :: (Predicate p a, Show a) => a -> Refined p a
refinErr v =
  case refine v of
    Left e -> error $ "Satisfing value [" <> show v <> "] is no valid: " <> show e
    Right vv -> vv

type ArgCollector m =
  (MonadIO m, MonadWriter [FilePath] m) => forall v. Data v => v -> m v

class RefinedInArgLocator x where
  locateRefinedInArg :: Proxy x -> ArgCollector m

class RefinedOutArgLocator x where
  locateRefinedOutArg :: Proxy x -> ArgCollector m