ve      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd Safe efghijklmnopqflmnopq efghijklmnopqNone 01345>IKLNr$ 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).8 can also observe functions as well a structural values.Functions 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 stuvwxyz{|}~ r{stuvwxyz{|}~ rstuvwxyz{|}~ r None               None0+ !"#$%&'()*+,-./0123456789:;<=>?@ %'+46  !"#$%&'()*+,-./0123456789:;<=>?@None0?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.@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy*z{|}~FGHIJKLMNOPQRSTUVWXYZ\^_`adegw.ABCDEFGHIJKLMNSOPQRTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyNone0 None *01345KL$+Returns a Judgement (see Libgraph library).%4Found counter example with simpler computation tree.=Use propositions to judge a computation statement. First tries restricted and bottom for unevaluated expressions, then unrestricted and random values for unevaluated expressions.x !"#$%&'()*+,-./0123456789:;<=>h !"#$%&'()*+,-./0123456789:;<=>[ !"#$%&'()*+,-./0123456789:;<=> None.     *     HLighweight algorithmic debugging based on observing intermediate values.Q(c) 2000 Andy Gill, (c) 2010 University of Kansas, (c) 2013-2015 Maarten FaddegonBSD3hoed@maartenfaddegon.nl experimentalPOSIXNone B"run some code and return the TraceCThe 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) D~Hoed internal function that stores a serialized version of the tree on disk (assisted debugging spawns new instances of Hoed).E#Repeat and trace a failing testcaseFUse property based judging.G#Repeat and trace a failing testcaseH Short for  runO . print.I;Only produces a trace. Useful for performance measurements.JGEntry point giving you access to the internals of Hoed. Also see: runO.KHTrace and write computation tree to file. Useful for regression testing.L)As logO, but with property-based judging.?@ABCDEFGHIJKLM  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMCHEFG789:;<456/*+,-.&'()0123D>J=#$%?@AKLI !"  B?@ABCDEFGHIJKL None 01345>IKLN\$ 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).\8 can also observe functions as well a structural values.\Functions 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  !"#$%&'()*+,-./0123456MNOP789QR:;<=>?@ABSTCDEFUVGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghiWXYjZ[k\]^lmnop_qrstuvwxyz{|}~.!"#$%&'()*+,-.3456MNOPQR>STDFUVWXYZ[\]^_vw|~x !"#$%&'()*+,-./0123456MNOP789QR:;<=>?@ABSTCDEFUVGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghiWXYjZ[k\]^lmnop_qrstuvwxyz{|}~[ Noner`     `R`      None  !"#$%&'()*+,-./0  !"#$%&'()*+,-./0 !"#$%&'()*+,-./0bLighweight algorithmic debugging based on observing intermediate values and the cost centre stack.Q(c) 2000 Andy Gill, (c) 2010 University of Kansas, (c) 2013-2014 Maarten FaddegonBSD3hoed@maartenfaddegon.nl experimentalPOSIXNoneaZrun some code and return the CDS structure (for when you want to write your own debugger).b Short for  runO . print.cThe 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) 1234abc56d789:;<MNOPQRSTUVWXYZ[\]^_`abcd\cbUV]^MNOPdQRST[YZ_WXa` 1234abc56d789:;<= !!"#$%&'&()* + , - . / 0 1 1 2 3 3 4 5 6 7 8 9 : ; < = > ? @ A B C C D E F G H IJKLMNOPQRSTUVW X Y Z [             \ ]   MSNV^_`abcdefghijklmmnopqrstuvwwxyz{||}~      !"#$%&'()*+,-./0123456789:;<<=>?@ABBCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopnonoqnornorsstuvwxyz{|}~                                                                                                         H      z                          k l q r s t u v    w w   z {    m m   | | }                ! " # $ % & '          ( & ) & * + , - - . / ! ! 0 1 2 3 4 5 6    7 8 9 : ; < = > ? @ A B | C D E F G  H I J K L M ! " # $ % & ' ( N O ) * + , - . 5 P / 0 Q R S 1 T U V W 4 3 X 2 Y Z [ \ ] ^ _ ` a 6 b    c d e f g   h  i j k   l    m   n       opqrsUUtuvwxyHoed_0oRdbmk2hmV54uPtWMj6b9Debug.Hoed.PureDebug.Hoed.Stk Paths_HoedDebug.Hoed.Pure.ObserveDebug.Hoed.Pure.EventForestDebug.Hoed.Pure.RenderDebug.Hoed.Pure.CompTreeDebug.Hoed.Pure.SerializeDebug.Hoed.Pure.PropDebug.Hoed.Pure.DemoGUIDebug.Hoed.Stk.ObserveDebug.Hoed.Stk.RenderDebug.Hoed.Stk.DemoGUIbase GHC.GenericsGenericObserverO Observableobserver constrain constrainBase observeTempl observedTypes observeBase observeOpaquethunknothunk<<observesendCDSCompStmt stmtLabelstmtIdentifierstmtResCompTreeVertex RootVertex vertexStmt vertexJmtunjudgedCharacterCountParEq=== UnevalHandlerBottomForallFromListJudgeAlternativeTreeModule moduleName searchPathPropositionType IOPropositionBoolPropositionLegacyQuickCheckPropositionQuickCheckProposition Proposition SignatureArgumentSubjectFunctionRandomPropTypeSpecify PropertiesOf Propositions propositionspropTypefunName extraModulesjudgeconAp VerbosityVerboseSilentdebugOrunO runOstoretestOrunOwptestOwpprintO traceOnlyrunO'logOlogOwp Identifier UnknownId DependsJustOnInSequenceAfter observeCCobserve'catchIOversionbindirlibdirdatadir libexecdir sysconfdir getBinDir getLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNamegobserveUIDParent parentUIDparentPositionParentPositionChangeObserveConsEnterNoEnterFunEventeventUID eventParentchangeTrace ObserverMrunMO Observing TypeOrPredTPTyVarMap GConstrain gconstrain GObservable gdmobservergdmObserveChildrengdmShallowShowgdmFunObserver genClassDef className methodName headToUpper gobserverBasegobserverBaseClause gobserverList gobservergobserverClausesgobserverClause listClauses listClause1 listClause2gobservableInstance updateContextgobservableBaseInstancegobservableListInstancegobserverFunClause gobserverFun gfunObserver shallowShow isObservable isObservable' isObservableT isObservablePthunkObservableobserveChildrengmapM compositionM lookupBinding getBindings getPBindings getPBindings'getTvbsgetBsgetBs'getNamegetName'getTvsgetConstructorsguniqueVariables observableCxtclasspObservableqcontObservablecontObservableqtvnametvnamegthunkgdMapM observer_ gdmobserver_ observer__unsafeWithUniqgenerateContextsendEnterPacketgsendEnterPacketsendNoEnterPacketevaluatesendObserveFnPacketroot isRootEventstartEventStreamendEventStream sendEventevents badEventssendSeminitUniqgetUniqpeepUniquniquniqSem ourCatchAllIO handleExc $fShowParent $fShowEvent$fMonadObserverM$fApplicativeObserverM$fFunctorObserverM$fObservableDynamic$fObservableSomeException$fObservableIO$fObservableArray$fObservableEither$fObservableMaybe$fObservable[]$fObservable(,,,,)$fObservable(,,,)$fObservable(,,)$fObservable(,)$fObservable()$fObservableChar$fObservableDouble$fObservableFloat$fObservableInteger$fObservableBool$fObservableInt$fObservable(->)$fGObservableK1$fGObservable:*:$fGObservable:+:$fGObservableU1$fGObservableM1$fGObservableM10$fGObservableM11$fGConstrainM1$fGConstrainM10$fGConstrainM11$fGConstrainK1$fGConstrainU1$fGConstrain:*:$fGConstrain:+:VisitLocationTrunk ArgumentOfResultOfFieldOf InfixOrPrefixInfixPrefix EventForestisRootelemsaddEvent mkEventForestparentUIDLookupparentPosLookupidVisit dfsChildrendfsFoldtreeUIDs eventsInTree topLevelApps appendApp$fShowLocationOutputOutLabelOutDataCDSSetCDSNamedCDSConsCDSFun CDSEntered CDSTerminated noNewlines noNewlines'renderCompStmtsrenderCompStmtrenderNamedTop nubSorted eventsToCDSrender renderSet renderSet'renderFn renderNamedFnfindFnfindFn'rmEntry rmEntrySet simplifyCDSsimplifyCDSSet spotStringparen cdssToOutput cdsToOutputnilgrpbrksepsp$fShowCompStmtConsMapNestingSpan ComputingPaused TraceInfo topLvlFun locations computations storedStack dependencies ConstantValuevalStmtvalLocvalMinvalMaxCVRoot getJudgement setJudgementisRightisWrong isUnassessed isAssistedisInconclusiveisInconclusive' isPassing isPassing' vertexUID vertexRes isRootVertexleafsunjudgedjudged replaceVertex mkCompTree insertCon getLocation setLocationseeFun getTopLvlFun cpyTopLvlFunshowCs getSpanUIDisSpanstartstoppauseresumeactiveComputations addDependency mkConsMap corToCons traceInfo $fShowSpan$fShowConstantValuelibgr_IzdQGnXraCh6BqrvzHbyd8Data.Graph.Libgraph.CoreverticesarcsGraphDB storeTree restoreTree storeTrace restoreTracestoreJudgementsrestoreJudgementsrestoreemptylookupinsertkey judgement $fSerializeDB$fSerializeChange$fSerializeEvent$fSerializeParent$fSerializeCompStmt$fSerializeAssistedMessage$fSerializeJudgement$fSerializeVertex$fSerializeArc$fSerializeGraphGParEqgParEq PropVarGenPropVarsPropResErrorHoldHoldWeakDisprove DisproveBypropositionTypepropName signature propModule sourceFile buildFilesexeFileoutFileerrFile treeFilePath traceFilePathlookupPropositions lookupWithjudgeAlljudge'holds disproves disprovesBy simplestTreesimple2advicecommas errorMessagesisError unevalHandler unevalStateresOfevalPropositionsevalPropositionreEvalPropositioncleancompilerun generateCodegetEventFromMapeventMap mkPropResshorten backspacescompliftPV propVars0 propVarError propVarFresh propVarReturn propVarBind generatePrintgenerategenerateHeadinggenerateImport generateMain generateRes generateRes' generateArgsmoreArgs generateExprgenConAp orNothingcatchEqcatchGEq $fParEqChar $fParEqDouble $fParEqFloat$fParEqInteger $fParEqBool $fParEqInt $fParEqMaybe $fParEq(,) $fParEq[] $fGParEqM1 $fGParEqM10 $fGParEqM11 $fGParEqK1 $fGParEqU1 $fGParEq:*: $fGParEq:+:MaxStringLength ShorterThan UnlimitedAdvance AdvanceToNext DoNotAdvanceguiMain activeTabotherTabtabstyleguiHelpguiStats guiObserve updateRegEx guiAssisted resetTree testCurrent guiAlgoDebugadvance advanceTo guiExplorejudgementFilePathstorepreordershowStmt getMessage getMessage' updateMenu selectVertex menuVerticeslookupCurrentVertexmarkNode shorterThan60summarizeVertexvertexGraphvizLabel htmlEscape vertexImg updateStatus redrawWithredraw summarizeisCurrentVertexfaultyVerticesrunOncefirstRun condPutStrLn debugSessionThreadIdThreadIdUnknownportIdparent TraceThreadIdDoNotTraceThreadId observeParent observePort CallStack emptyStackgetStack ccsToStringsDocNilTextLineDOCNIL:<>NESTTEXTLINESEPBREAK:<|> CompGraphRoot equationsstatusTreeBagbagStackbagStmtsequLabel equThreadId equIdentifier equDependsOnequResequStackhead' showWithStackbyStack compareStack nextStacknextStack_truncatecontainsbag+++mkBagsmkTreemkTreescmpStkstmts flattenStmtslaccexpandsplitpushDepspushArcspusherscallDepscallDepmkGraph renderTops renderTop commonOutputmkTextmkLinetoplen<>nesttextlinefoldflattenlayoutbestbebetterpretty $fEqVertex$fOrdBag$fEqBag $fEqCompStmtFilterShowAllShowSuccShowPred ShowMatchdemoGUI vertexFilteronClick newStatus onClickFilter showCompStmts updateTree getStatusPushModeVanillaDropTruncatepushMode setPushMode getPushMode parseArgs stylesheet