!       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  Safe Safe"7Xdlmvt-utilsCFormats a date into a Text string using specified formatting string Arguments:format :: Text: Vhttps://hackage.haskell.org/package/time-1.9.2/docs/Data-Time-Format.html#v:formatTime Format stringdate :: UTCTime: Date to format<Return value: String containing a date in a specified formatvt-utilsAFormats a date into a Text string using ISO8601 formatting stringFormat: %Y-%m-%d %H:%M:%SOutput example: 2018-11-25 00:00:01 Arguments:date :: UTCtime: Date to format8Return value: String containing a date in ISO8601 formatvt-utils'Parses Text string using ISO8601 format Raises an  Jhttp://hackage.haskell.org/package/base-4.12.0.0/docs/Prelude.html#v:errorerror3, if input string cannot be parsed as ISO8601 dateExpected input example: 2018-11-25 00:00:01 Arguments: text :: Text1: Text string containing a date in ISO8601 formatReturn value: Parsed dateNone"7Xdlm)vt-utilsPasses specified TextC string as a NUL-terminated UTF-8 string to the specified IO action Arguments: text :: Text: Input stringfun :: CString -> IO a: IO action to run+Return value: Value returned from IO actionvt-utilsPasses specified TextD string as a NUL-terminated UTF-16 string to the specified IO action Arguments: text :: Text: Input stringfun :: Ptr Word16 -> IO a: IO action to run+Return value: Value returned from IO actionvt-utilsPasses specified Storable> value as a pointer (to that value) to the specified IO action Arguments:val :: Storable a : Input valuefun :: Ptr a -> IO b: IO action to run+Return value: Value returned from IO actionvt-utils(Passes a pointer to a NULL pointer of a Storable type to the specified IO action Arguments:fun :: Ptr (Ptr a) -> IO b: IO action to run+Return value: Value returned from IO actionSafe"7Xdlm4vt-utils-Reads contents of a specified file as a lazy  ByteString< (with streaming) and provides it to the specified callback0Throws an error if specified file cannot be read Arguments: path :: Text: path to file0fun :: (Data.ByteString.Lazy.ByteString -> IO a)#: callback to process the file data/Return value: Result of the callback invocationvt-utils-Reads contents of a specified file as a lazy Text< (with streaming) and provides it to the specified callbackFile contents are decoded as UTF-80Throws an error if specified file cannot be read Arguments: path :: Text: path to file$fun :: (Data.Text.Lazy.Text -> IO a)#: callback to process the file data/Return value: Result of the callback invocationNone"7XdlmRSvt-utilsEncodes a data into a JSON Text stringData must be an instance of Ohttps://hackage.haskell.org/package/aeson-1.4.2.0/docs/Data-Aeson.html#t:ToJSONToJSON)Throws an error if data cannot be encoded Arguments:data :: ToJSON7: some data that supports JSON serialization with AesonReturn value: JSON Text stringvt-utilsParses a JSON Text string into a typed data5Data type should be specified with a type annotation:Example: % let dt = jsonDecodeText text :: Foo Data must be an instance of Qhttps://hackage.haskell.org/package/aeson-1.4.2.0/docs/Data-Aeson.html#t:FromJSONFromJSON)Throws an error if data cannot be decoded Arguments: text :: Text: JSON Text string to parseReturn value: Decoded datavt-utils:Parses contents of a specified JSON file into a typed data5Data type should be specified with a type annotation:Example: 3 dt <- jsonDecodeFile "path/to/foo.json" :: IO Foo Data must be an instance of Qhttps://hackage.haskell.org/package/aeson-1.4.2.0/docs/Data-Aeson.html#t:FromJSONFromJSONFile contents are decoded as UTF-8@Throws an error if file cannot be read or data cannot be decoded Arguments: path :: Text: Path to JSON fileReturn value: Decoded datavt-utils6Extract the field value from the specified JSON object#Throws an error, if specified JSON Value is not a JSON object, if it does't contain a specified field, if field type is different from the one specified in type annotation5Data type should be specified with a type annotation:  let obj = object [ "foo" .= (42 :: Int) , "bar" .= ("baz" :: Text) ] let fooval = jsonGet obj "foo" :: Int let barval = jsonGet obj "bar" :: Text  Arguments:val :: Aeson.Value#: JSON value, must be a JSON object field :: Text : Field nameReturn value: Field valuevt-utilsJSON options with unwrapUnaryRecords flag flipped to TrueSafe"7XdlmVvt-utilsLookups a key in a HashMap0Throws an error if key not found in a specified HashMap Arguments:map :: HashMap Text v : Map with Text keys key :: Text: Key to lookup=Return value: Map value that corresponds to the specified keySafe"7Xdlmc-vt-utils)Checks whether specified path is absolute7Only checks the path string itself, doesn't use FS API. Arguments: path :: Text: FS path to checkReturn value: True if path is absolute, False otherwisevt-utilsConcatenates two paths1Throws an error, if specified postfix is absolute Arguments:prefix :: Text: Path prefix, may be absolutepostfix :: Text$: Path postfix, must not be absoluteReturn value: Concatenated pathvt-utils0Prepends an absolute prefix to the relative path)Does nothing, if path is already absolute Arguments:prefix :: Text: Path prefix, must be absolutepostfix :: Text: Path postfix, may be absolute|Return value: Path with a specified prefix prepended, if path is relative, specified path unchanged otherwise Safe"7Xdlmfvt-utilsCopies a directory recursively]Throws an exception if source directory does not exist or if destination path already exists Arguments: src :: Text: Source directory dest :: Text: Destination path None"7Xdlmlvt-utils-Spawns a new process and waits for it to exit Arguments:executable :: Text: Path to executable binaryargs :: Vector Text!: Arguments to pass to executable out :: Text( Path to a file, where std output (both stdout and stderr) will be writtenReturn value: Process exit code None"7Xdlmvt-utilsStringifies specified value If input is Text, String or  ByteString, it is returned as a Text+ string without additional quotes around it Arguments:val :: a: Value to stringifyReturn value: Text+ string representation of a specified valuevt-utilsSplits specified Text string into a Vector# of parts using specified delimiterDelimiter must be non-empty Arguments:haystack :: Text: string to splitneedle :: Text delimiterReturn value:  Vector Text0 vector containing the parts of the input stringvt-utilsConcatenates specified Vector; of string parts interspersing it with specified parametersLength of the parameters Vector* must be equal to the length of the parts Vector minus 1 Arguments:parts :: Vector Text: string partsparams :: Vector Text) parameters to intersperse into the partsReturn value:  Vector Text0 vector containing the parts of the input stringvt-utils5Formats specified template with specified parameters VectorTemplate must use {} string for placeholders.\Number of specified parameters must equal to the number of placeholders inside the template.=Template preparation is relatively expensive, consider using textFormatParts for frequently used templates. Arguments:template :: Text: string partsparams :: Vector Text) parameters to intersperse into the partsReturn value:  Vector Text0 vector containing the parts of the input stringNone"7Xdlm vt-utils-Finds a line containing a specified substringUses LF as a line separator/Resulting line doesn't contain a line separator Arguments:needle :: Text: Substring to find6Return value: Line that contains a specified substringvt-utils$Finds a line with a specified prefixUses LF as a line separatorMWhitespace is stripped from the start of each line before checking for prefix/Resulting line doesn't contain a line separator Arguments:prefix :: Text: Prefix to find,Return value: Line with the specified prefixvt-utils2Finds a line that does not have a specified prefixUses LF as a line separatorMWhitespace is stripped from the start of each line before checking for prefix/Resulting line doesn't contain a line separator Arguments:prefix :: Text: Prefix that should be skipped>Return value: First line that does not have a specified prefixvt-utils!Skips a specified number of linesUses LF as a line separatorYDoes not consume additional whitespace after the last line skipped (or between the lines) Arguments: count :: Int: Number of lines to skipvt-utils6Skips all input until the specified substring is found.Warning: all look-ahead data is kept in memory Arguments:needle :: Text: Substring to find>Return value: First line that does not have a specified prefixvt-utils The parser  parsecTry pg behaves like parser p, except that it pretends that it hasn't consumed any input when an error occursThis is a re-export of  Ohttps://hackage.haskell.org/package/parsec-3.1.13.0/docs/Text-Parsec.html#v:tryText.Parsec.try. under a different name to not conflict with Shttps://hackage.haskell.org/package/base-4.12.0.0/docs/Control-Exception.html#v:tryControl.Exception.try Arguments:parser :: Parser a: Parser to wrap into try7Return value: Resulting value from the specified parservt-utils'Skips one or more whitespace charactersNote: Lexemes from  ]https://hackage.haskell.org/package/parsec-3.1.13.0/docs/Text-Parsec-Token.html#v:TokenParserText.Parsec.Token.TokenParser can be used insteadvt-utilsFormats  ParseError into Text string Arguments:err :: ParseError:  ParseError thrown by ParsecReturn value: Text$ representation of a specified errorvt-utilsTLazily reads contents from a specified file and parses it using the specified parserFile contents are decoded as UTF-81Throws an error on file IO error or parsing error Arguments:parser :: Parser a,: Parser to use for the contents of the filepath :: ParseError: Path to a file to parse7Return value: Resulting value from the specified parservt-utilsParser a specified strict Text string using a specified parser Note: parser is typed on a lazy Text$ input (so it can also be used with parsecParseFile) Throws an error on parsing error Arguments:parser :: Parser a,: Parser to use for the contents of the file text :: Text: Text string to parse7Return value: Resulting value from the specified parser None"7Xdlm2vt-utils#Parses a specified SQL file into a HashMap. that contains all SQL queries as map entriesSQL file example: y -- -- test queries -- /** selectFoo */ select foo from bar /** updateBar */ update bar set foo = 42 XNote: there must be an empty line after the initial comment lines on the top of the file1Throws an error on file IO error or parsing error Arguments: path :: Text: Path to SQL fileReturn value: HashMap# containing SQL queries from a file None"7Xdlmvt-utils,Runs all HUnit tests from a specified Vector#Tests results are printed to stdout Arguments:tests :: Vector Test: HUnit tests to runvt-utilsRuns a subset of HUnit# tests with a specified label value-Throws an error if no tests in the specified Vector have specified label#Tests results are printed to stdout Arguments:tests :: Vector Test : HUnit tests label :: Text : Group labelvt-utils$Runs a single test from a specified Vector of HUnit testspThrows an error if a test with a specified group label and test label is not found in specified Vector of tests#Tests results are printed to stdout Arguments:tests :: Vector Test : HUnit testsgrlabel :: Text : Group labeltslabel :: Text : Test labelvt-utils$Runs all, group or one of specified HUnit. tests depending on the command line argumentsExample specifying argument to  stack test invocation: & stack test --ta "GroupName testName" 8If no arguments are specified - all test are run.grlabelRIf single argument is specified - it is interpreted as a name of the group.grlabelgIf two argument are specified - first one is interpreted as a group name, and second one as a test name0Throws an error on invalid command line argument#Tests results are printed to stdout Arguments:tests :: Vector Test: HUnit tests to runNone"7Xdlm vt-utils Content-Type header for application/json typevt-utils-URL path string of the specified HTTP request Arguments:req :: Request: HTTP requestReturn value: URL path stringvt-utils0Reads a body of the specified HTTP request as a Text string Arguments:req :: Request: HTTP request Return value: Request body as a Text stringvt-utilsHReads a body of the specified HTTP request and parses it as a JSON value5Data type should be specified with a type annotation:Example: ) dt <- httpRequestBodyJSON req :: IO Foo Data must be an instance of Qhttps://hackage.haskell.org/package/aeson-1.4.2.0/docs/Data-Aeson.html#t:FromJSONFromJSON Arguments:req :: Request: HTTP request1Return value: Request body parsed as a JSON valuevt-utils+Headers of the specified HTTP request as a Vector of  (name, value) pairs Arguments:req :: Request: HTTP request#Return value: Request headers as a Vector of  (name, value) pairsvt-utils+Headers of the specified HTTP request as a  name -> value map Arguments:req :: Request: HTTP request#Return value: Request headers as a  name -> value mapvt-utils'Read a body of HTTP response as a lazy  ByteString Arguments: label :: Text:: Label used for error reporting on overly-large responsesresp :: Response BodyReader: HTTP responsethreshold :: Int" Max response body length in bytes&Return value: Response body as a lazy  ByteStringvt-utils"Read a body of HTTP response as a Text string Arguments: label :: Text:: Label used for error reporting on overly-large responsesresp :: Response BodyReader: HTTP responsethreshold :: Int" Max response body length in bytes!Return value: Response body as a Text stringvt-utils,Read a body of HTTP response as a JSON value5Data type should be specified with a type annotation:Example: 6 dt <- httpResponseBodyJSON label resp 1024 :: IO Foo Data must be an instance of Qhttps://hackage.haskell.org/package/aeson-1.4.2.0/docs/Data-Aeson.html#t:FromJSONFromJSON Arguments: label :: Text:: Label used for error reporting on overly-large responsesresp :: Response BodyReader: HTTP responsethreshold :: Int" Max response body length in bytes+Return value: Response body as a JSON valuevt-utils,Headers of the specified HTTP response as a Vector of  (name, value) pairs Arguments:req :: Response: HTTP request$Return value: Response headers as a Vector of  (name, value) pairsvt-utils,Headers of the specified HTTP response as a  name -> value map Arguments:req :: Response: HTTP request$Return value: Response headers as a  name -> value map None"7Xdlm trs z{|uv)QPO@A&#%$ !"'(*+,-./0132457689:;<=>?BCDEFGHIJKLMNSRUTWVYX[Z]\_^a`cbdkjghieflmnopqwxy}~&#"'(%$*|{t} -zvs~u OANr; @L)wCBIJD?M=><o739451862:qp+PQ0xy.,/K !mHnfeldEFSR[Z_^WVcbUT]\a`YXGkihgj !"#$%&'()*+,-./01234546789:4;4<=>=?=@=ABCDE4F9G9H4IDJDK.LMNOPQRSTUQVWXYZ[\]^_`^_a^_b^_c^de^df^dg^hi^hjklmnopqrsrtuvuwuxyzy{y|}~}BBB%%%%%NNNNQQQQQQRQRQRQRQQQQQQQXXXX[\              !"#$%& ' ( ) * + ,-./0123456 7 8 9 : ; <=>?@ABCDEFGHIJKLMNOP'vt-utils-1.2.0.0-6F9XR7TOMW21mTgqPuBi60VtUtils.PreludeVtUtils.Parsec VtUtils.Date VtUtils.FFI VtUtils.IO VtUtils.JSON VtUtils.Map VtUtils.Path VtUtils.FSVtUtils.Process VtUtils.TextVtUtils.Queries VtUtils.HUnit VtUtils.HTTPPaths_vt_utilsghc-primGHC.Primseqbase Data.TuplefstsndGHC.Base otherwise Debug.Tracetrace$GHC.Num- GHC.Classes==>=>>=>>fmapreturnGHC.Real fromIntegral<>mconcat<*>pureEqGHC.ReadReadGHC.ShowShowData.Typeable.InternalTypeable GHC.GenericsGeneric GHC.TypesBoolIntGHC.IntInt64 GHC.MaybeMaybeIOWordGHC.WordWord8Word16Word32Word64GHC.PtrPtr Data.EitherEitherFalseNothingJustTrueLeftRightshowStringbytestring-0.10.8.2Data.ByteString.Internal ByteString text-1.2.3.1Data.Text.Internal.BuilderBuilder Data.Functor<$>Data.Text.InternalText time-1.8.0.2 Data.Time.Clock.Internal.UTCTimeUTCTime4unordered-containers-0.2.10.0-LgoTL3wbBEY5bZIDJiyxW4Data.HashMap.BaseHashMap$aeson-1.4.2.0-AJSJFErvuVt75VMZs4WuOEData.Aeson.Types.ToJSON genericToJSONtoJSONToJSON.=Data.Aeson.Types.FromJSONgenericParseJSON parseJSONFromJSONData.Aeson.Types.InternalobjectValue)aeson-pretty-0.8.7-DYnvyTMkmwn8uW6LJweIk1Data.Aeson.Encode.Pretty encodePretty Text.ReadreadControl.Monad.IO.ClassliftIO Control.MonadmfilterunlessData.TraversableforMsequencemapMControl.Exception.Basebracket_brackettryForeign.C.StringCString CStringLenForeign.Marshal.Utils copyBytesGHC.ForeignPtrnewForeignPtr_GHC.IOcatch GHC.Exceptionthrow Data.Typeablecast Data.Foldable sequence_forM_mapM_lengthfoldl'foldr'Foreign.C.TypesCCharCUCharCShortCUShortCIntCUIntCLongCULongCSize Foreign.Ptr ptrToIntPtrForeign.Storablepokepeek pokeByteOff peekByteOff alignmentsizeOfStorableplusPtrcastPtrnullPtrGHC.STrunST Data.Bits.|..&.moddiv/floorceilingGHC.Listtake Data.MaybefromJustisJustabs*+$!flip.idwhenGHC.Err undefinederrorGHC.Exception.Type SomeException/=<=&&||not<>Data.ByteStringpackCStringLen packCStringuseAsCStringLen useAsCString(http-client-0.6.1-Gz7U3bH2YnqBJWvkphyZ7dNetwork.HTTP.Client.Core withResponseNetwork.HTTP.Client.Manager newManagerNetwork.HTTP.Client.Request parseRequest_Network.HTTP.Client.TypesManagertransformers-0.5.5.0Control.Monad.Trans.Classliftparsec-3.1.13.0Text.Parsec.Text.LazyParserText.Parsec.Prim<|> Data.Text.IOputStrLngetLine appendFile writeFilereadFile toLazyText fromLazyText fromStringfromTextData.Text.LazytoStrict Data.TextpackData.Text.ForeignwithCStringLenpeekCStringLenData.Text.Encoding encodeUtf8 decodeUtf8Data.Text.ShowunpackData.Time.Clock.POSIXgetCurrentTimeutcTimeToPOSIXSecondsposixSecondsToUTCTime"Data.Time.Clock.Internal.POSIXTime POSIXTimelookup&vector-0.12.0.2-H1Eu1OCXL0L9y980iV8EwU Data.VectorfromListtoListifoldl'!Vector wai-3.2.2-Bltpe2TVuZhB9Dl8t0SjwO Network.WailazyRequestBody responseLBS ApplicationNetwork.Wai.InternalrequestBodyLength queryStringrequestHeaders rawPathInfo requestMethodRequest KnownLength ChunkedBodyRequestBodyLength dateFormatdateFormatISO8601dateParseISO8601 ffiWithUTF8 ffiWithUTF16 ffiWithPtr ffiWithPtrPtrioWithFileBytesioWithFileTextjsonEncodeTextjsonDecodeTextjsonDecodeFilejsonGetjsonUnwrapUnaryOptionsmapGetpathIsAbsolute pathConcat pathPrependfsCopyDirectoryprocessSpawnAndWaittextShow textSplittextFormatParts textFormatparsecLineContainsparsecLinePrefixparsecLineNoPrefixparsecSkipLinesparsecSkipManyTill parsecTryparsecWhitespaceparsecErrorToTextparsecParseFileparsecParseTextQueries queriesLoadhunitRun hunitRunGrouphunitRunSingle hunitMainhttpContentTypeJSONhttpRequestPathhttpRequestBodyTexthttpRequestBodyJSONhttpRequestHeadershttpRequestHeadersMaphttpResponseBodyhttpResponseBodyTexthttpResponseBodyJSONhttpResponseHeadershttpResponseHeadersMapversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName