E{L      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKNone "#%+FTVBL6A mutable bag-like collection with atomic O(1) insertsMSize of internal vectorsN^Returns an immutable snapshot of the rope contents after resetting the rope to the empty stateLOPQNRLSTMUVWXYZSafe[\] None-FSTN^_`a_`aNone+-67;<=>?FKQSTV]-G#A type class for observable values.For + datatypes it can be derived automatically.For opaque datatypes, use S or rely on the catch-all  ? instance.KCustom implementations can exclude one or more fields from the observation:  instance (Observable a, Observable b) => Observable (excluded, a,b) where observe (excluded,a,b) = send "(,,)" (return (,,) excluded << a << b) XY$ observes data structures in flight.An example of use is 4 map (+1) . observe "intermeduate" . map (+2) DIn this example, we observe the value that flows from the producer map (+2) to the consumer map (+1).Y8 can also observe functions as well a structural values.YFunctions which you suspect of misbehaving are annotated with observe and should have a cost centre set. The name of the function, the label of the cost centre and the label given to observe need to be the same. Consider the following function: triple x = x + x&This function is annotated as follows: Atriple y = (observe "triple" (\x -> {# SCC "triple" #} x + x)) y'To produce computation statements like:  triple 3 = 6+To observe a value its type needs to be of class Observable. We provided instances for many types already. If you have defined your own type, and want to observe a function that takes a value of this type as argument or returns a value of this type, an Observable instance can be derived as follows: \ data MyType = MyNumber Int | MyName String deriving Generic instance Observable MyType Kb3K9c2J8  !"#$%&'>?@ABCFEDGIHLMNOPQRSTUVWXYZ[\]^_`abcd )*( !"#$%&'532532532532532;98;98;98;98;98fKJfKJfKJfKJfKJLMNOGHHIICDEFPABnmlkjiwvutsrQRS~}|{zyx>?@qpoTUVWXYZ[\]^_`abcd  532;98>?@ABCDEFGHHIIfKJV9 None2defghijklmnopqrstuvwefghijlk Safe2xy None  "#%FT^7zThe zipper of span lists{4A snoc list with the spans to the left of the cursor|5A cons list with the spans to the right of the cursor}BA list of computation spans. Negative UIDs denote paused spans.~'A bijection between SpanList and [Span]1A forgetful mapping between SpanZipper and [Span] zz{|} NoneK9Conditional output to stderrConditional output to stderrHLighweight algorithmic debugging based on observing intermediate values.(c) 2016 Maarten FaddegonBSD3hoed@maartenfaddegon.nl experimentalPOSIXNone7portableSafe6])A Document represents a *set* of layouts.LA space, if the following still fits on the current line, otherwise newline.LNothing, if the following still fits on the current line, otherwise newline.5Increase identation relative to the *current* column. Combine with a space in between.Combine with a  in between.Combine with a  in between.Combine with a  in between.Combine with a  in between.)Combine non-empty list of documents with , i.e., a space separator.)Combine non-empty list of documents with  , i.e., a  separator.)Combine non-empty list of documents with  , i.e., a  separator.nCombine non-empty list of documents vertically as a group. Seperated by space instead if all fit on one line.)Combine non-empty list of documents with .)Combine non-empty list of documents with  , i.e., a  separator.)Combine non-empty list of documents with  , i.e., a  separator.FCombine non-empty list of documents, filling lines as far as possible.%The empty document; equal to text "".`Atomic document consisting of just the given text. There should be no newline \n in the string.Either a space or a new line.Either nothing () or a new line.HHorizontal composition of two documents. Is associative with identity .VMark document as group, that is, layout as a single line if possible. Within a group for all basic documents with several layouts the same layout is chosen, that is, they are all horizontal or all new lines. Within a vertical group there can be a horizontal group, but within a horizontal group all groups are also layouted horizontally.FIncreases current indentation level (absolute). Assumes argument >= 0."Set indentation to current column.Pretty print within given width. Selects from the *set* of layouts that the document represents the widest that fits within the given width. If no such layout exists, then it will choose the narrowest that exceeds the given width.655556None %6FKTV]b-Reconstructs functional values from a CDSSet. Returns a triple containing: 1. The arguments, if any, or an empty list for non function values 2. The result 3. The id of the CDSFun, if a functional value.None "#$%6;=>?FT^iWreferences from the UID of an event to the UID of the corresponding top-level Fun event2reference from parent UID and position to location?The forest of computation trees. Also see the Libgraph library.Approximates the complexity of a computation tree by summing the length of the unjudged computation statements (i.e not Right or Wrong) in the tree.& & None6;=kuNone %067;<=STp+Returns a Judgement (see Libgraph library). 4Found counter example with simpler computation tree.0Use propositions to judge a computation statement. First tries restricted and bottom for unevaluated expressions, then unrestricted, and finally with randomly generated values for unevaluated expressions.      !"$#%&*)('+,-./0      !"#$%&'(1)2*+,       !"#$%&'()*None  "#$%<]d|-The nesting depth of a span.JA representation of a trace as a span diagram: a list of columns of spans./&A representation of an event as a span0lRecover the spans from the trace and arrange the columns such that they reflect span containment. A span b is contained in another span a if "start b > start a && end b < end amThe span in column N is contained below N other spans. The renderer should draw the columns left to right.1TODO to be improved2GReturns the vertices satisfying the predicate. Doesn't alter the graph.3456789:;<=>?@ABCDEFGHIJKLMNOPQ/RSTUHLighweight algorithmic debugging based on observing intermediate values.Q(c) 2000 Andy Gill, (c) 2010 University of Kansas, (c) 2013-2018 Maarten FaddegonBSD3hoed@maartenfaddegon.nl experimentalPOSIXNone "#;=K ;"run some code and return the Trace<The main entry point; run some IO code, and debug inside it. After the IO action is completed, an algorithmic debugging session is started at  http://localhost:10000// to which you can connect with your webbrowser. For example: H main = runO $ do print (triple 3) print (triple 2) >~Hoed internal function that stores a serialized version of the tree on disk (assisted debugging spawns new instances of Hoed).?#Repeat and trace a failing testcase@Use property based judging.A#Repeat and trace a failing testcaseB Short for  runO . print.D;Only produces a trace. Useful for performance measurements.FGEntry point giving you access to the internals of Hoed. Also see: runO.GHTrace and write computation tree to file. Useful for regression testing.H)As logO, but with property-based judging.ISA catch-all instance for non observable types that produces the opaque observation  ?.dGHIPRSTVY^     ! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHgY<B?=3456E@CA%&'()*"#$+,-./     !2>1789:F0 GHDGHHIIVT^SRP;3456789:NoneNeJ+A handy TH wrapper for observing functions. N obs [d| trimPat :: Exp S -> Pat S -> Pat S trimPat vs = filterPat ((! freeVars vs) . void) |] is equivalent to: H trimPat = observe "trimPat" trimPat' trimPat' vs = filterPat .... J accepts multiple declarations, and all the functions inside will be wrapped as above, while the rest of declarations will stay unchanged. As such it can be used to observe entire modules.KKA handy TH wrapper for debugging functions, offering more information than J  debug [d| quicksort [] = [] quicksort (x:xs) = quicksort lt ++ [x] ++ quicksort gt where (lt, gt) = partition (<= x) xs |]  expands to:  quicksort = observe "quicksort" quicksort' quicksort' [] = [] quicksort' (x:xs) = quicksort lt ++ [x] ++ quicksort gt where (observe "lt" -> lt, observe "lt" -> gt) = partition (<= x) xs ZThe additional information may lead to unnecessary questions in algorithmic debugging, J- is the recommended wrapper for that purpose.V>List all the type variables of kind * (or do the best you can)JKKJW !""#$$%&'()*+,-../011234!56789:;<=>?@ABCDEFGHIJKLMNOPQRSSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   SST[\]$$mfjr       !"#$%&'(()*++,-./0123456789:;<=>?@AB<CDDEFGHIJKLM N O P QRSTRSU V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { { | | } ~        L     r !""#$%&'()*+,-./01234567r89:;<!Hoed-0.5.0-5hFBwqx9TjN1nwMTSabw5a Debug.NoHoedDebug.Hoed.RenderDebug.Hoed.CompTreeDebug.Hoed.Observe Debug.Hoed Debug.Hoed.THData.Rope.MutableDebug.Hoed.CompatDebug.Hoed.FieldsDebug.Hoed.EventForestDebug.Hoed.ReadLineDebug.Hoed.SpanDebug.Hoed.Util Paths_HoedText.PrettyPrint.FPrettyDebug.Hoed.SerializeDebug.Hoed.PropDebug.Hoed.ConsoleSetmemberbase GHC.GenericsGenericReptofrom Data.OldListsortOn$libgraph-1.14-AJy13LrUf4nKnHh8DlJeOmData.Graph.Libgraph.CorearcsverticesrootGraphTraceParent parentUIDparentPositionParentPositionChangeObserveConsConsCharEnterFun EventWithIdeventUIDeventEvent eventParentchangeUID isRootEventendEventStream sendEventlookupOrAddStringeventsstringsstringsLookupTable lookupString $fShowParent $fShowEvent$fShowEventWithId $fEqChange $fShowChange$fGenericChange $fEqParent$fGenericParent $fEqEvent$fGenericEventV_Change MV_Change$fVectorVectorChangeD:R:VectorChange0$fMVectorMVectorChange $fUnboxChangeV_Parent MV_Parent$fVectorVectorParentD:R:VectorParent0$fMVectorMVectorParent $fUnboxParent ObserverMrunMO GConstrain gconstrain GObservable gdmobservergdmObserveArgsgdmShallowShow Observableobserver constrainV_EventMV_EventinitUniqgetUniqpeepUniquniq constrainBasegdmFunObserver observeBase observeOpaquethunkgthunk<<gdMapMgobserveobserve observer_ gdmobserver_unsafeWithUniqgenerateContextsendsendEnterPacketgsendEnterPacketevaluatesendObserveFnPacket ourCatchAllIO handleExc$fVectorVectorEventD:R:VectorEvent0$fMVectorMVectorEvent $fUnboxEvent$fGConstrainM1$fGConstrainM10$fGConstrainM11$fGConstrainU1$fGConstrain:*:$fGConstrain:+:$fMonadObserverM$fApplicativeObserverM$fFunctorObserverM$fGObservable:*:$fGObservable:+:$fGObservableU1$fGObservableM1$fGObservableM10$fGObservableM11$fObservableDynamic$fObservableSomeException$fObservableIO$fObservableArray$fObservableEither$fObservableMaybe$fObservable[]$fObservable(,,,,)$fObservable(,,,)$fObservable(,,)$fObservable(,)$fObservable()$fObservableChar$fObservableDouble$fObservableFloat$fObservableInteger$fObservableBool$fObservableInt$fObservable(->)$fGObservableK1$fGConstrainK1 VerbosityVerboseSilentrunOprintOtestOCDS StmtDetailsStmtConStmtLamstmtCon stmtPretty stmtLamArgs stmtLamResCompStmt stmtLabelstmtIdentifier stmtDetailsstmtRes noNewlinesrenderCompStmts eventsToCDS$fNFDataStmtDetails$fShowCompStmt$fHashableCompStmt $fOrdCompStmt $fEqCompStmt$fNFDataCompStmt $fNFDataCDS$fIsListParentList$fHashableCDSsansUID$fOrdCDSsansUID$fEqCDSsansUID$fGenericStmtDetails$fGenericCompStmt $fShowCDS$fEqCDS$fOrdCDS $fGenericCDS $fEqOutput $fOrdOutput $fShowOutput$fApplicativeMemoM$fFunctorMemoM $fMonadMemoM TraceInfo computations dependencies ConstantValueCVRootvalStmtvalLocvalMinvalMaxCompTreeVertex RootVertex vertexStmt vertexJmt getJudgement setJudgementisRightisWrong isUnassessed isAssistedisInconclusive isPassing vertexUID vertexRes isRootVertexleafsunjudgedCharacterCount replaceVertex mkCompTree traceInfo $fNFDataArc$fNFDataJudgement$fNFDataAssistedMessage$fNFDataVertex$fHashableVertex $fEqVertex$fShowConstantValue $fShowVertex $fOrdVertex$fGenericVertex$fEqConstantValue $fEqTopLvlFun$fShowTraceInfoParEqparEq UnevalHandlerRestrictedBottomBottomForallFromListJudgeAlternativeTreeModule moduleName searchPathPropositionType IOPropositionBoolPropositionLegacyQuickCheckPropositionQuickCheckProposition PropositionpropositionType propModulepropName signaturemaxSizetestgenTestGenTestGenQuickCheckTestGenLegacyQuickCheck SignatureArgumentSubjectFunctionRandomPropTypeSpecify PropertiesOf Propositions propositionspropTypefunName extraModules mkPropositionofType withSignaturesizeHint withTestGenjudgeconAp=== HoedOptionsverbose prettyWidth HoedAnalysis hoedTrace hoedCompTreedebugOrunOwith runOstorerunOwptestOwpprintOwp traceOnlydefaultHoedOptionsrunO'logOlogOwp $fObservableaobsdebugRoperopeDimresetwritenewnew'fromList ropeState RopeState ropeDepth ropeLastIndex ropeElements spillOverGHC.Base<$ Data.Functor<$> addConstraint FieldLimitNatZS&vector-0.12.0.1-LflPw1fguMb6as60UrZpxNData.Vector.Unboxed.BaseMVectorVectorVisitLocationTrunk ArgumentOfResultOfFieldOf InfixOrPrefixPrefixInfix EventForestelems mkEventForestparentUIDLookupparentPosLookupidVisit dfsChildrendfsFoldtreeUIDs eventsInTree topLevelApps noBufferingreadLine SpanZipperleftrightSpanList$fIsListSpanList$fIsListSpanZipperSpan ComputingPaused getSpanUID startSpan pauseSpan resumeSpanstopSpan runSpanTestsTestUIDVerbatimSZSZNil cursorUIDSpanConsSpanNil condPutStr condPutStrLnSeconds stopWatchversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNameDocsoftline softbreakhang<+>line<$$> linebreakhsepvsepfillSepsephcat<>vcatfillCatcatemptytextgroupnestalignprettyTextNilLine:<>GroupNestAlignfindFnMemoM CDSsansUIDOutputOutLabelOutData ParentList ParentCons ParentNilCDSNamedCDSConsCDSFun CDSEntered CDSTerminatedCDSChar CDSString topLvlFun_ locations EventDetails TopLvlFun storeTree restoreTree storeTrace restoreTracestoreJudgementsrestoreJudgementsDBGParEqgParEq PropVarGenPropVarsPropRes DisproveByDisproveHoldWeakHoldError sourceFile buildFilesexeFileoutFileerrFile treeFilePath traceFilePathlookupPropositions lookupWithjudgeAlljudge'holds disproves disprovesBy simplestTreesimple2advicecommas errorMessagesisError unevalHandler unevalStateresOfevalPropositionsevalPropositionreEvalPropositioncleancompilerun generateCode mkPropResshorten backspacescompliftPV propVars0 propVarError propVarFresh propVarReturn propVarBind generatePrintgenerategenerateHeadinggenerateImport generateMain generateRes generateRes' generateArgs nothingOrArgnoArgareFunjustFuns isJustFungenerateFunMap generateCaseisArgisRes isJustRes hasParentPospvCatpvConcatmoreArgs generateExprgenConAp orNothingcatchEqcatchGEqDepthSpans traceToSpans renderTraceselectVertices debugSession showGraphStatecvtracecompTreepsCommandnameargsDesc commandDescparse TransitionDownUpNextSame Explanation ObservationRequestReturn ReturnDetails ReturnFun ReturnCons constructorarityvalueRequestDetailsRD spanStartspanEndpolaritykindStar