Ȝ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 3Filter all elements matching include patterns and > remove all elements matching exclude patterns to the result. aIf no include pattern is given, all elements are accepted minus those matching exclude patterns. RIf no exclude pattern is given, all elements matching include patterns are taken. Initial list to filter exclude patterns (regex) include patterns (regex) ^List with all elements matching include patterns minus all elements matching exclude patterns MRepresents an action of shaker ERepresents the mapping between the command-line input and the action FRepresents the mapping beetween an action and the function to execute /Agregate a FilePath with its modification time  Represents directory to listen #location of the listened directory ignore patterns include patterns )Configuration of the continuous listener The files to listen &Delay beetween 2 check in microsecond 0Configuration flags to pass to the ghc compiler "Source directory of haskell files PDesctipition of the compile input (executable or library if comming from cabal)  Destination of .o and .hi files dA transform fonction wich will takes the DynFlags of the current ghc session and change some values =The command line to pass options to pass to the ghc compiler ,List of files or list of modules to compile 2Represents the global configuration of the system !"#$%&'()+Command agregate a duration with an action *+DShakerAction represents the differents actions realisable by shaker ,Delete generated - Exit shaker .Nothing to execute /Execute a command 0Display the help 10Display an error when invalid action is inputed 2MExecute both quickcheck and hunit using test framework on recompiled modules 37Execute both quickcheck and hunit using test framework 4 Compile all hs sources with ghc 5Compile sources with ghc 6789TToken is used to manage the token between action executor and command-line listener :2The input mvar is used to push the parsed command ;7Action represents the differents action with arguments <=>+Duration define the life span of an action ?OExecute the action when a source file modification is done until it is stopped @)Execute the action and give back control A*Environnement for the project compilation 9 This environnement can change depending on the compile  action called BCDE4Environnement containing the project configuration. # It is generated at startup and won' t change FGDefault compilation argument.  Wall is activated by default Hdefault dynamics flags 7 the sources are expected to be in src as described in  Ahttp://www.haskell.org/haskellwiki/structure_of_a_haskell_project @ the result of compilation (.o and .hi) are placed in the target/ directory J there is no main linkage by default to allow faster compilation feedback I#The default Listener configuration 0 Listened sources are all haskell sources in src and testsuite  The default delay is 2 sec J$Default haskell file pattern : *.hs K#Default exclude pattern : Setup.hs LMM  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMMEDCBA>@?;=<:6789+543210/.-,)* !"#$%&'(F  GHIJKLMM  !"#$%&'( !"#$%&'()**+ 543210/.-,,-./0123456789789:;=<<=>@??@ABCDEFGHIJKLMN$Print the list of available actions O:Print exit. The real exit management is made in conductor P"Print a begin action notification QR!Print an end action notification SWClean action is responsible to delete directory containing temporary .o and .hi files TNOPQRSTNOPQRSTNOPQRST UHGet the tuples of (newFiles,modifiedFiles) from given list of directory @Get the tuples of (newFiles,modifiedFiles) from given directory V0Get the list of FileInfo of the given directory W#List files in the given directory ? Files matching one regexp in the ignore argument are excluded XYRecursively list all files % All non matching files are excluded Z[ JKUVWXYZ[ UWVXY[ZJKUVWXYZ[\]^_`a3Build the list of haskell source files located in  CompileInput source dirs "Build an individual CompileFile. b>Merge source dirs informations from the CompileInput list to  create a single CompileInput cHConfigure the CompileInput with all haskell files configured as targets MChange the dynflags with information from the CompileInput like importPaths  and .o and .hi directory defHFill compile input with every haskell files in the project except those & containing main and template haskell g,Configure and load targets of compilation. C It is possible to exploit the compilation result after this step. hi*Check of the module need to be recompile. G Modify ghc session by adding the module iface in the homePackageTable List of modified files ModSummary to check -Result : is the module need to be recompiled j\]^_`abcdefghij\]^_`bacedfhgji\]^_`]^_`abcdefghijk3Run haskell compilation on given CompileInput list l-Run haskell compilation on all haskell files gklklgkl"mnopq<Mapping between module name (to import) and test to execute rsComplete name of the module tHunit test function names uQuickCheck test function names vACollect all non-main modules with their test function associated wCollect all non-main modules x0Analyze all haskell modules of the project and ) output all module needing recompilation yz)Compile, load and run the given function 8Collect module name and tests name for the given module {$List all test group of the project.  see  Shaker.TestTH |@List all test group for test-framework from the list of modules }/Remove all modules which does not contain test )Generate a test group for a given module /Generate an expression for a single hunit test 8Generate an expression for a single quickcheck property ~/Include only module matching the given pattern mnopqrstuvwxyz{|}~qrstumnopvwxyz}{~|mnopnopqrsturstuvwxyz{|}~  KThe default plugin map contains mapping for compile, help and exit action  %Agregate all information of listener Files found in the last check /Differences between last and before last check !List of all forks id initialized 2MVar used to pass action to the directory scanner 6MVar used to store modifiedFiles since the last check 'MVar used to store currentFiles listed %initialize the mvar and launch forks 3manage the job box. Fill it with a job every delay *listen to the job box and process the job Update the files status  $Parse the given string to a Command Parse a Command Parse to an action Parse a ShakerAction Parse the continuous tag (~)  +Listen to keyboard input and parse command Execute the entered command Settings for haskeline 67896789Initialize the master thread - Once quit is called, all threads are killed The main thread. :Execute the given action when the modified MVar is filled &Execute Given Command in a new thread Execute given action &Execute a single action with argument 3Add the given threadId to the listener thread list /Add the given threadId to the quit thread list (Add the given threadId to the mvar list GRead the build information from cabal and output a shakerInput from it @Extract useful information from localBuildInfo to a ShakerInput :Extract informations : Convert executable and library to  compile inputs 9Dispatch the processing depending of the library content -Convert a cabal executable to a compileInput . The target of compilation will the main file *Convert a cabal library to a compileInput 7 The target of compilation will be all exposed modules 7Create a dynFlags for ghc from a source directory and  a liste of packages .Check and filter all invalid main definission Template for the test group. ( Currently generate a list of type [Test] with a test group per module   !"#$%&''()*+,,-./01234556789:;<=>?@AABCDEFEGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeefghijklmnopqrstuuvwxxyz{|}~        shaker-0.4 Shaker.Regex Shaker.TypeShaker.Action.Standard Shaker.IoShaker.SourceHelperShaker.Action.CompileShaker.ReflexiviteShaker.Action.TestShaker.Action.ExecuteShaker.PluginConfigShaker.Listener Shaker.Parser Shaker.CliShaker.Conductor Shaker.ConfigShaker.Cabal.CabalInfo Shaker.TestTHprocessListWithRegexpPlugin CommandMap PluginMapFileInfofileInfoFilePathfileInfoClockTimeFileListenInfodirignoreinclude ListenerInputfileListenInfodelay CompileInput cfSourceDirs cfDescriptioncfCompileTarget cfDynFlagscfCommandLineFlags cfTargetFiles ThreadData listenToken quitTokenthreadIdListenListthreadIdQuitList ShakerInput compileInputs listenerInput pluginMap commandMapargumentmodifiedInfoFiles threadData inputStateCommand ShakerActionCleanQuitEmptyExecuteHelp InvalidActionIntelligentTestFramework TestFramework FullCompileCompile InputStateinputtokenInputAction ActionWithArgDuration ContinuousOneShotCompileMToken ThreadIdListShakerRShakergetListenThreadListdefaultCompileInputdefaultCompileFlagsdefaultListenerInputdefaultHaskellPatternsdefaultExclude exitCommand emptyCommandrunHelprunExitrunStartActionrunEmpty runEndActionrunCleanrunInvalidActionlistModifiedAndCreatedFilesgetCurrentFpCl listFilesrecurseMultipleListFilesrecurseListFilesisFileContainingTHisFileContainingMain CompileFilecfFp cfHasMaincfHasTHconstructCompileFileListmergeCompileInputsSourcessetAllHsFilesAsTargetsremoveFileWithTemplateHaskellremoveFileWithMain"fillCompileInputWithStandardTarget ghcCompile initializeGhcisModuleNeedCompilationcheckUnchangedSources runCompilerunFullCompileRunnableFunctioncfModulecfFunctionName ModuleMapping cfModuleName cfHunitName cfPropNamecollectAllModulesForTestcollectAllModulescollectChangedModulescollectChangedModulesForTest runFunctionlistAllTestFrameworkGroupListlistTestFrameworkGroupListremoveNonTestModulefilterModulesWithPatternrunTestFrameworkrunIntelligentTestFrameworkrunTestFramework' runExecutelaunchFunctionparseModuleAndActionsplitdefaultPluginMapdefaultCommandMap ListenState currentFilesmvModifiedFiles threadIdsinitializeListenerschedulelistenupdateFileStat parseCommandgetInput listActions initThreadexecuteCommand defaultInputdefaultInputInitializeddefaultThreadDatadefaultInputStatedefaultCabalInputthListTestFramework getExcluded getIncluded=~+listModifiedAndCreatedFiles'isFileContainingconvertToFullPathremoveDotDirectoryCompileRconstructCompileFile!configureDynFlagsWithCompileInput getFileListenInfoForCompileInputremoveFileWithPredicatecheckUnchangedSources'runSingleCompileInputinitializeFilesForCompilationcollectAllModules'collectChangedModules'collectChangedModulesForTest'handleActionInterruptgetModuleMappinggetQuickCheckFunctiongetHunitFunctionsgetFunctionTypeWithPredicategetFunctionNameWithPredicategetFunctionNameFromId getIdList tyThingToIdgetSingleTestFrameworkGroupgetSingleFrameworkHunitgetSingleFrameworkQuickCheckJobMvModifiedFiles CurrentFiles initialize typeCommandtypeCommandNonEmpty typeEmptytypeMultipleAction typeAction parseArgumenttypeShakerAction typeDurationparseMapAction processInputmyDefaultSettingscompleteActionautocompleteFunctiontrimList ConductorData mainThreadinitializeConductorDatacleanAllThreads cleanThreadsthreadExecutorthreadExecutor' executeActionexecuteAction'handleContinuousInterruptaddThreadIdToListenMVaraddThreadIdToQuitMVaraddThreadIdToMVarreadConflocalBuildInfoToShakerInputcompileInputsToListenerInputlocalBuildInfoToCompileInputsexecutableAndLibToCompileInputexecutableToCompileInputlibraryToCompileInput toDynFlagsgetCompileOptionsgetLibDependenciesgetPackageNameconvertModuleNameToStringcheckInvalidMaincheckInvalidMain'