{-# LANGUAGE NamedFieldPuns #-} module Helpers (embedInFileName, toArgsString, userModuleFromString) where import Config import UserModule (UserModule, userModule_Main) import qualified UserModule import Data.Either.Extra (fromRight') embedInFileName :: StackCollapseConfig -> String embedInFileName Config { operationMode , sourceMode , functionNameMode , annotationMode , userModules , inputType } = embedInputType inputType ++ embedOperationMode operationMode ++ embedSourceMode sourceMode ++ embedFunctionNameMode functionNameMode ++ embedAnnotationMode annotationMode ++ embedUserModules userModules where embedInputType Standard = "-p" embedInputType Detailed = "" embedUserModules = concatMap (('+':) . UserModule.toString) . filter (/= userModule_Main) embedOperationMode Time = "--time" embedOperationMode Alloc = "--alloc" embedSourceMode SourceAlways = "--source-always" embedSourceMode SourceUser = "--source-user" embedSourceMode SourceNever = "" embedFunctionNameMode QualifiedAlways = "--qualified" embedFunctionNameMode QualifiedKernel = "" embedFunctionNameMode QualifiedNever = "--no-qualified" embedAnnotationMode WithAnnotations = "" embedAnnotationMode NoAnnotations = "--no-annot" toArgsString :: StackCollapseConfig -> String toArgsString Config { operationMode , sourceMode , functionNameMode , annotationMode , userModules , inputType } = unwords $ [ toArgs_Op operationMode , toArgs_Source sourceMode , toArgs_FunctionName functionNameMode , toArgs_Annot annotationMode , toArgs_Input inputType] ++ toArgs_userModules userModules where toArgs_userModules = map (("-u " ++) . UserModule.toString) . filter (/= userModule_Main) toArgs_Op Time = "--time" toArgs_Op Alloc = "--alloc" toArgs_Source SourceAlways = "-S" toArgs_Source SourceUser = "-s" toArgs_Source SourceNever = "--no-source" toArgs_FunctionName QualifiedAlways = "-Q" toArgs_FunctionName QualifiedKernel = "-q" toArgs_FunctionName QualifiedNever = "--no-qualified" toArgs_Annot WithAnnotations = "-A" toArgs_Annot NoAnnotations = "--no-annot" toArgs_Input Standard = "-p" toArgs_Input Detailed = "-P" userModuleFromString :: String -> UserModule userModuleFromString = fromRight' . UserModule.parseUserModule