úÎ!°ĻI†      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu vwxyz{|}~€  ‚ ƒ „ … Safe†‡ˆ‰Š‹ŒSafe"7Xdlmogvt-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 formathvt-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 formativt-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 dateghighiSafe"7Xdlm!)jvt-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 invocationkvt-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 invocationjkjkNone"7Xdlm=ˆlvt-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 stringmvt-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 datanvt-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 dataovt-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 valuelmnonmloSafe"7XdlmAāpvt-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 keyppSafe"7XdlmNZqvt-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 otherwiservt-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 pathsvt-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 otherwiseqrsqrsSafe"7XdlmR+tvt-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 pathtt Safe"7XdlmVžuvt-utilsStringifies a 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 valueuuNone"7XdlmW:t L><=  ABCMQR  01 !"#$%&'()*+,-./23456789:;?@DEFGHIJKNOPTUVWXYZ[\]^_`abcdefghijklmnopqrsut!CB>RQMLFDNO$ A=JE G1:<P- 08 IK3264/9.H;*,()+"'b?@ %]`_^UTWV\#[YZX&a7fecd5ghijknmlopqrsuSafe"7XdlmŠü vvt-utils-Finds a line containing a specified substringUses LF as a line separator(Consumes whitespace after the line found/Resulting line doesn't contain a line separator Arguments:needle :: Text: Substring to find6Return value: Line that contains a specified substringwvt-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(Consumes whitespace after the line found/Resulting line doesn't contain a line separator Arguments:prefix :: Text: Prefix to find,Return value: Line with the specified prefixxvt-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(Consumes whitespace after the line found/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 prefixyvt-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 skipzvt-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 prefix{vt-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 parser|vt-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 instead}vt-utilsFormats  ParseError into Text string Arguments:err :: ParseError:  ParseError thrown by ParsecReturn value: Text$ representation of a specified error~vt-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 Svwxyz{|}~ Svwxyz{|}~ Safe"7Xdlm“Pvt-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"7XdlmĻ%‚vt-utils,Runs all HUnit tests from a specified Vector#Tests results are printed to stdout Arguments:tests :: Vector Test: HUnit tests to runƒvt-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 label„vt-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 label…vt-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 run‚ƒ„……‚ƒ„Ž    !"# $%&'()*+, -. -/0123 -456 -72829 -:5;5<'=>?@ABCDEFBGHIJKLMNOPQOPROSTOUVOUWXYZ[\]\^\_`a`b`cdefghijkjljmnopqrstsuvwxyz{|}~~€‚ ƒ „ … † ‡ ˆ ‰Š‹ŒBŽBBB‘BC’BC“BC”BC•B–—B˜™Bš›BšœBžIŸ LMĄĒĢĪĒĢĨĒĢĶȨ̄ĻĐŠŦŽ­ŪŊ°ąēģīĩ ķ·ļđšŧž―ūŋĀ Á Â Ã Ä Å Æ Į Č É Ę Ë Ė Í ÎÏ&vt-utils-1.0.0.0-5ZtdU7ijKAJjTBKmV5pW4VtUtils.PreludeVtUtils.Parsec VtUtils.Date VtUtils.IO VtUtils.Json VtUtils.Map VtUtils.Path VtUtils.FS VtUtils.TextVtUtils.Queries VtUtils.HUnitPaths_vt_utilsghc-primGHC.PrimseqbaseGHC.Base otherwise Debug.Tracetrace$GHC.Num- GHC.Classes==>=>>=>>fmapreturnGHC.Real fromIntegral<><*>pureEqGHC.ReadReadGHC.ShowShowData.Typeable.InternalTypeable GHC.GenericsGeneric GHC.TypesBoolIntGHC.IntInt64 GHC.MaybeMaybeIO 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.UTCTimeUTCTime2unordered-containers-0.2.9.0-I6OVG4HR3i6hFXdo933HbData.HashMap.BaseHashMap$aeson-1.4.2.0-FbcZbLWiD6IKOFxedcQj8qData.Aeson.Types.ToJSONToJSON.=Data.Aeson.Types.FromJSONFromJSONData.Aeson.Types.InternalobjectObject Text.Readread Control.MonadunlessData.TraversableforMsequencemapMControl.Exception.Basebracket_brackettryForeign.C.StringCString GHC.Exceptionthrow Data.Typeablecast Data.Foldable sequence_forM_mapM_GHC.STrunSTmoddiv/ Data.MaybefromJustisJustabs*+$!flip.idwhenGHC.Err undefinederrorGHC.Exception.Type SomeException/=<=&&||not<>parsec-3.1.13.0Text.Parsec.Text.LazyParser Data.Text.IOputStrLn appendFile writeFilereadFile toLazyText fromLazyText fromStringfromTextData.Text.LazytoStrict Data.TextpackData.Text.Encoding encodeUtf8 decodeUtf8Data.Text.ShowunpackData.Time.Clock.POSIXgetCurrentTimelookup&vector-0.12.0.1-KAZQ3Nmj85LLvErDPMKv7R Data.VectorfromListtoList!Vector dateFormatdateFormatISO8601dateParseISO8601ioWithFileBytesioWithFileTextjsonEncodeTextjsonDecodeTextjsonDecodeFilejsonGetmapGetpathIsAbsolute pathConcat pathPrependfsCopyDirectorytextShowparsecLineContainsparsecLinePrefixparsecLineNoPrefixparsecSkipLinesparsecSkipManyTill parsecTryparsecWhitespaceparsecErrorToTextparsecParseFileparsecParseTextQueries queriesLoadhunitRun hunitRunGrouphunitRunSingle hunitMainversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName