1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
------------------------------------------------------------------------------
-- Some auxiliary operations for CurryCheck
------------------------------------------------------------------------------

module CC.Helpers ( ccLoadPath )
 where

import Data.List          ( intercalate, isInfixOf )
import System.Environment ( getEnv )
import System.FilePath    ( searchPathSeparator )

import CC.Config ( getPackageLoadPath )

--- Computes the load path for executing the
--- generated program that executes all checks.
--- The load path consists of the standard load path (defined by `CURRYPATH`)
--- and the additional load path for packages required by CurryCheck.
ccLoadPath :: IO String
ccLoadPath = do
    ecurrypath <- getEnv "CURRYPATH"
    let ecurrypath' = case ecurrypath of ':':_ -> '.':ecurrypath
                                         _     -> ecurrypath
    execpath <- ccExecLoadPath
    return $ intercalate [searchPathSeparator] $
      if null ecurrypath' then execpath else ecurrypath' : execpath

--- Computes the additional load path for executing the
--- generated program that executes all checks.
ccExecLoadPath :: IO [String]
ccExecLoadPath = fmap (filter isRequiredPackage) getPackageLoadPath
 where
  isRequiredPackage dir =
    any (`isInfixOf` dir)
        [ "allvalues", "ansi-terminal", "directory", "distribution"
        , "easycheck", "filepath", "process", "profiling", "random"
        , "searchtree-extra", "time" ]