úÎ!®Ï¦çˆ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw xyz{|}~€‚ ƒ „ … † ‡ Safe2ˆ‰Š‹ŒŽSafe"7Xdlm‰ivt-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 formatjvt-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 formatkvt-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 dateijkijkSafe"7Xdlm!Clvt-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 invocationmvt-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 invocationlmlmNone"7Xdlm=¢nvt-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 stringovt-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 datapvt-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 dataqvt-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 valuenopqponqSafe"7XdlmAúrvt-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 keyrrSafe"7XdlmNtsvt-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 otherwisetvt-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 pathuvt-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 otherwisestustuSafe"7XdlmREvvt-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 pathvv Safe"7XdlmVÖwvt-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 valuewwSafe"7Xdlm… xvt-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 substringyvt-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 prefixzvt-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 prefix{vt-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 skip|vt-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 insteadvt-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 Uxyz{|}~€ Uxyz{|}~€ Safe"7Xdlmhƒ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î‚ N@>?  CDEOST  23 !"#$%&')(*,+-./01456789:;<=ABFGHIJKLMPQRUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚!ED@TSONHFPQ$ C?LG I3<>R/ 2: KM54861;0J=,).*-+("'dAB %_ba`WVYX^#][\Z&c9hgef7ijkvlmponqrUxyz{|}~€stuw 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<'=>?@ABCDEFBGHIJKLMNOPQOPROPSOTUOTVOWXOWYZ[\]^_^`^abcbdbefghijklmlnlopqrstuvuwxyz{|}~€€‚ƒ„ … † ‡ ˆ ‰ Š ‹ŒŽBB‘B’B“BC”BC•BC–BC—B˜™Bš›BœBœžBŸ I¡¢LM£¤¥¦¤¥§¤¥¨¤¥©ª«¬­®¯°±²³´µ¶· ¸¹º»¼½¾¿ÀÁ Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï ÐÑ'vt-utils-1.0.1.0-2vh3eHqnARnDJ6qDtljIW1VtUtils.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-JZc2U6s4vaKFvJHZufMJ44Data.Aeson.Types.ToJSONtoJSONToJSON.=Data.Aeson.Types.FromJSON parseJSONFromJSONData.Aeson.Types.InternalobjectValue 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.2-H1Eu1OCXL0L9y980iV8EwU Data.VectorfromListtoList!Vector dateFormatdateFormatISO8601dateParseISO8601ioWithFileBytesioWithFileTextjsonEncodeTextjsonDecodeTextjsonDecodeFilejsonGetmapGetpathIsAbsolute pathConcat pathPrependfsCopyDirectorytextShowparsecLineContainsparsecLinePrefixparsecLineNoPrefixparsecSkipLinesparsecSkipManyTill parsecTryparsecWhitespaceparsecErrorToTextparsecParseFileparsecParseTextQueries queriesLoadhunitRun hunitRunGrouphunitRunSingle hunitMainversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName