!twK@      !"#$%&'()*+,-./0123456789:;<=>?None"#.6Ki~@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None"#.6Kico-log specialized to co-log0Pure monad transformer for logging. Can log any msgH messages. Allows to log messages by storing them in the internal state.co-logReturns result value of  and list of logged messages.co-logReturns result value of  and list of logged messages.co-log that prints msg, by appending it to the end of the sequence.None "#+.6KVi$  co-lognewtype wrapper  that keeps  in its context.co-log*Perform logging action with given message msg5. This function works for monads that have access to .$You can use this function like this:  example ::   env  m => m () example = do  "First message..."  "Second message..." co-logLogs multiple messages.co-logSPerforms given monadic logging action by applying function to every logging record. app ::   env  m => m () app =  (cmap ("app:" ++)) $ do  "First message..."  "Second message..." co-log Runner for  E monad. Let's consider one simple example of monadic action you have: app ::   env  m => m () app = do  "Starting application..."  (cmap ("app:" ++)) $ do  "Application started."  "Application finished." 6You can use the following way of running such example:  ( o) app And you will see this output: KStarting application... app:Application started. app:Application finished.   None"#%&'-.6;<=>?FKTV]ci myThreadId "utcTime" -> getCurrentTime .co-logFormats  in the following way: .[Severity] [Time] [SourceLocation] [ThreadId]  Textmessage /co-logAllows to extend basic !) type with given dependent map of fields. !"#$%&'()*+,-./!"#$%&'()*+, -./None"#.6Ki=_None"#.6KiI 4co-logAction that prints  to stdout. 5co-logAction that prints  to stderr. 6co-logAction that prints  to . 7co-logAction that prints  to file. Instead of returning  it's implemented in continuation-passing style because it's more efficient to open file only once at the start of the application and write to : instead of opening file each time we need to write to it.Opens file in .8co-logAction that prints  to stdout. 9co-logAction that prints  to stderr. :co-logAction that prints  to . ;co-logAction that prints  to file. See 7 for details. <co-logAction that prints  to stdout. =co-logAction that prints  to stderr. >co-logAction that prints  to . ?co-logAction that prints  to file. See 7 for details. 456789:;<=>? 456789:;<=>?None"#.6KiJT  !"#$%&'()*+,-./456789:;<=>?       !"##$%&&'()*+,-./0123456789:;<=>?@ABCDEFGHIDJKDJLDMNDMODEPDEQDERGHSDTUDTVDWXDYZDY[DY\DE]D^_D^`D^aD^bD^cD^dD^eD^fD^gD^hD^iD^jGklGkmGknDopDoqDorDosDotDouDovDowDoxDoyDozDo{Do|Do}Do~DoDoDoDTDTDTDTDTDTDTDTDTDTDTDTDEDEDEDEDEDEDEDDDDDDDDGkGkGkGkGkGkGkGkDDTDTDTDTDTDTDTDTDDDDDDDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEGGGGGGGGGDDDDDDEDEDEGGGGDTDTGGDDDDDDDGGGD G D  D D^D^DEDEDDDDDDDDDDDDDY D!"D!#D!$D!%D&'D&(D&)D&*D&+D,-D,.D/0D/1DW2DW3DW4DW5DW6DW7DW8DW9DW:DW;DW<DW=D>D?D@DABDACDACDADDEFDGHDGHDGIDJKDLMDLNDOPDOQDRSDRTDRUDRVDRWDLXDYZD[\D]^D]_D]`D]aD]bD]cDdeDdeDdfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvwDvwDvxDvyDvyDvzD{|D{}D{~D{~D{D{D{D{D{D{D{D{D{D{D{D{D{D{D{D{D{D{D{DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDTDTDTDTDTDTDTDDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDDDDDDDDDMDMDMDDDDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE DE DE DE DE D]D]D D D{GkGkGk !"#$%#$&#$'#$(#$)*+,*+-*./*.01231241251261271281291:;1:<1:=1:>1:?*@A*@A*@B*CD*CD*CE*CF*CG*CH*CI*JK*JK*JL*JM*JN*JO*JP*JQ*JR*JSTUVTUWTUXTUYTZ[TZ\T]^T_`T_aT_bT_cT_d*ef*eg*eh*eh*eijkljmnjmojmpjmqjrsjrtjrujrvjrwjrxjryjrzj{|j{}j{~j{jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj j j jr jr j j jjjjjjjjjjjjjjjjj !"#$%&$'($')$'*$'+$',-DR./01$%2$%3$%4$%5$%6$%7$%8$%9$%:$%;$%<$%=$%>$%?$%@$%A$%B$%C$%&$%D$EF$'G$'H$'I$'J$'K$EL$EM$ENOco-log-0.1.0-inplace Colog.Pure Colog.Monad Colog.Message Colog.Contra Colog.ActionsPreludeColog PureLogger PureLoggerTrunPureLoggerT runPureLogT runPureLoglogMessagePure$fFunctorPureLoggerT$fApplicativePureLoggerT$fMonadPureLoggerT$fMonadTransPureLoggerT$fMonadStatePureLoggerTWithLogLoggerT runLoggerTlogMsglogMsgswithLog liftLogAction usingLoggerT$fMonadTransLoggerT$fFunctorLoggerT$fApplicativeLoggerT$fMonadLoggerT$fMonadIOLoggerT$fMonadReaderLoggerT RichMessageFieldMap MessageFieldunMesssageField FieldTypeMessagemessageSeverity messageStack messageTextloglogDebuglogInfo logWarninglogError logException fmtMessagedefaultFieldMapfmtRichMessageDefaultupgradeMessageAction$fIsLabelfieldName(->)$fDecidableLogAction$fDivisibleLogAction$fContravariantLogActionlogStringStdoutlogStringStderrlogStringHandlewithLogStringFilelogByteStringStdoutlogByteStringStderrlogByteStringHandlewithLogByteStringFile logTextStdout logTextStderr logTextHandlewithLogTextFilebaseGHC.Base++ghc-primGHC.PrimseqGHC.Listfilterzip Data.Tuplefstsnd otherwisemap$coerceGHC.Real fromIntegral realToFrac Control.MonadguardGHC.ExtsIsListfromList fromListNjoinGHC.EnumBoundedminBoundmaxBoundEnumenumFrom enumFromThenenumFromThenTo enumFromTofromEnumtoEnumsuccpred GHC.ClassesEq==/= GHC.FloatFloatingpiexpsqrt**logBasesincostanasinacosatansinhcoshtanhasinhacoshatanh Fractional fromRational/recipIntegral toIntegerquotremdivmodquotRemdivModMonad>>=>>returnFunctorfmap<$GHC.NumNum*+-negate fromIntegerabssignumOrd>=minmax><<=compareGHC.ReadReadReal toRationalRealFracproperFractiontruncateroundceilingfloorGHC.ShowShowData.Typeable.InternalTypeableControl.Monad.Fail MonadFailfail Data.StringIsString fromString Applicativepure<*>*>liftA2<* Data.FoldableFoldabletoListfoldrfoldMapnulllengthfoldl'foldData.Traversable TraversabletraversemapM sequenceAsequence GHC.GenericsGeneric GHC.TypeNatsKnownNatGHC.OverloadedLabelsIsLabel fromLabel Semigroup<>sconcatstimesMonoidmemptymappendmconcat GHC.TypesBoolFalseTrueCharDoubleD#FloatF#IntGHC.IntInt8Int16Int32Int64 integer-gmpGHC.Integer.TypeInteger GHC.NaturalNaturalMaybeNothingJustOrderingLTEQGTRatioRationalIOWordGHC.WordWord8Word16Word32Word64 Data.EitherEitherLeftRightType ConstraintNatCmpNat CoercibleGHC.Stack.Types CallStackGHC.IO.Handle.TypesHandleboundedEnumFromThenboundedEnumFrommaxIntminIntData.Functor.ComposeCompose getCompose Data.VoidvacuousabsurdVoidData.Semigroup mtimesDefaultcycle1 WrappedMonoidOption getOptionsortWithData.Bifunctor BifunctorfirstsecondbimapData.List.NonEmptyinitlasttailheadnonEmptyGHC.ExecutionStackshowStackTrace getStackTraceControl.Monad.IO.ClassMonadIOliftIOmfilter<$!>unless replicateM_ replicateM zipWithM_zipWithM mapAndUnzipMforever<=<>=>filterM mapAccumR mapAccumLforMControl.ApplicativeoptionalZipList getZipList Control.Arrow&&&Data.Functor.IdentityIdentity runIdentity System.IOwithFileGHC.IO.Handle.FDstderrstdin GHC.StackwithFrozenCallStack callStack GHC.Conc.Sync writeTVarreadTVarnewTVarSTMTVarstdout GHC.IORefIORefGHC.IOFilePath GHC.ExceptionprettyCallStack prettySrcLoc Exception toException fromExceptiondisplayExceptionData.Functor.ConstConstgetConstfindallanyorand concatMapconcatasum sequence_ sequenceA_forM_mapM_for_ traverse_foldlM Data.MonoidFirstgetFirstLastgetLastData.Semigroup.Internal stimesMonoidstimesIdempotentDualgetDualEndoappEndoAllgetAllAnygetAnySumgetSumProduct getProductAltgetAlt someNatValnatValSomeNat Data.OldListunfoldrsortOnsortBysort permutations subsequencestailsinitsgroupgenericReplicategenericSplitAt genericDrop genericTake genericLength transpose intercalate intersperse isPrefixOf Text.Read readMaybereads fromRightfromLeftisRightisLeftpartitionEithersrightsleftseitherData.Ord comparingDown Data.ProxyProxyControl.Category>>><<< GHC.IO.IOModeIOModeReadMode WriteMode AppendMode ReadWriteMode byteSwap64 byteSwap32 byteSwap16 Data.Bitsxor Data.Boolbool Data.Function&onfix Data.Functorvoid$><&><$>lcmgcd^^^oddeven denominator numeratorGHC.Charchrunzip3unzipzipWithzip3reversebreaksplitAtdroptake dropWhile takeWhilecycle replicaterepeatiteratescanrscanluncons Data.MaybemapMaybe catMaybes listToMaybe maybeToList fromMaybe isNothingisJustmaybeswapuncurrycurryGHC.MVarMVarsubtract GHC.Stack.CCScurrentCallStackasTypeOf$!flip.constidordwhen=<<liftA3<**> Alternativeempty<|>somemany MonadPlusmzeromplusNonEmpty:|String SomeException getCallStack HasCallStackstimesIdempotentMonoid&&||notbytestring-0.10.8.2Data.ByteString.Internal ByteStringcontainers-0.5.11.0Data.IntMap.InternalIntMapData.IntSet.InternalIntSetData.Map.InternalMapData.Sequence.InternalSeqData.Set.InternalSetdeepseq-1.4.3.0Control.DeepSeqforce$!!deepseqNFDatarnftransformers-0.5.5.0Control.Monad.Trans.Class MonadTransliftControl.Monad.Trans.Identity IdentityT runIdentityT mtl-2.2.2Control.Monad.State.Classgetsmodify'modify MonadStategetputstateControl.Monad.Reader.Classasks MonadReaderasklocalreaderControl.Monad.Trans.ExceptExceptT runExceptTControl.Monad.Trans.ReaderReaderT runReaderTReader runReader withReader withReaderT Control.Monad.Trans.State.StrictStateT runStateTStaterunState evalState execState withState evalStateT execStateT text-1.2.3.0 Data.TextunwordsunlineslineswordsData.Text.Encoding decodeUtf8'decodeUtf8WithData.Text.InternalTextData.Text.Encoding.Error lenientDecode strictDecodeOnError OnDecodeErrorUnicodeExceptionControl.Monad.Trans.MaybeexceptToMaybeTmaybeToExceptTMaybeT runMaybeTMrelude-0.3.0-220f6e1cadc2535a3f260d4ac2a9fd2ef65f8a4c463239c4c4dc2f0c35f50786Relude.ApplicativepassRelude.Bool.GuardguardMifMunlessMwhenM Relude.DebugerrortracetraceIdtraceM traceShow traceShowId traceShowM undefinedRelude.DeepSeq evaluateNF evaluateNF_ evaluateWHNF evaluateWHNF_Relude.ExceptionExcbug Relude.File appendFileBS appendFileLBSappendFileLTextappendFileText readFileBS readFileLBS readFileLText readFileText writeFileBS writeFileLBSwriteFileLText writeFileTextRelude.Foldable.FoldallMandManyMelem flipfoldl'foldMapAfoldMapMnotElemorMproductsumRelude.FunctionidentityRelude.Functor.Fmap<<$>>??flapRelude.Lifted.Concurrent atomically newEmptyMVarnewMVar newTVarIOputMVarreadMVar readTVarIOswapMVartakeMVar tryPutMVar tryReadMVar tryTakeMVarRelude.Lifted.Exitdie exitFailure exitSuccessexitWithRelude.Lifted.File appendFilehCloseopenFilereadFile writeFileRelude.Lifted.IORefatomicModifyIORefatomicModifyIORef'atomicWriteIORef modifyIORef modifyIORef'newIORef readIORef writeIORefRelude.Lifted.TerminalgetLineprintputStrputStrLnRelude.List.NonEmpty viaNonEmpty whenNotNull whenNotNullMRelude.Monad.Either leftToMaybe maybeToLeft maybeToRight rightToMaybewhenLeft whenLeftM whenLeftM_ whenLeft_ whenRight whenRightM whenRightM_ whenRight_Relude.Monad.Maybe?:whenJust whenJustM whenNothing whenNothingM whenNothingM_ whenNothing_Relude.Monad.TransevaluatingStateevaluatingStateTexecutingStateexecutingStateT hoistEither hoistMaybe usingReader usingReaderT usingState usingStateT Relude.Monoid maybeToMonoid Relude.NubhashNubordNubsortNub unstableNub Relude.PrintputBSputBSLnputLBSputLBSLnputLText putLTextLnputText putTextLnRelude.String.ConversionfromLazy fromStrict readEithershowLstm-2.5.0.0-b511b6ed3cae2244589dd21182fce899a58ea1569a6824cc7db93d6d501add86Control.Concurrent.STM.TVar modifyTVar'Qhashable-1.2.7.0-51269918ae66b4926a559d947e9843b9bc0aa8089caf6fd277c7dea46f2a1b61Data.Hashable.ClassHashable hashWithSaltRelude.Container.OneOneOneItemone UndefinedBug DisallowElemElemErrorMessage ConvertUtf8 decodeUtf8 encodeUtf8decodeUtf8Strict LByteStringLText LazyStricttoStricttoLazyToLTexttoLTextToStringtoStringToTexttoText]unordered-containers-0.2.9.0-a644f67687ae288382df15f56a27abb4b5a6daf6ea07eabcc56aaa3bbb26fbfaData.HashMap.BaseHashMap Data.HashSetHashSetco-log-core-0.1.0-inplaceColog.Core.Action LogActionColog.Core.SeveritySeverityDebugInfoWarningError showSeverityThreadIdKtime-1.9.2-9120984ce4f77d9748cb0ee481ba6bd68c8617f5286045066896d60ade00fcc4 Data.Time.Clock.Internal.UTCTimeUTCTime*<<<==>>>$>$<>*>*<>|<cfilterchoosecmapcmapMconquerdivideextendextract foldActionslose unLogActionColog.Core.Class overLogActionDEIWfilterBySeverityHasLog getLogAction setLogAction