packages feed

Hoed 0.4.0 → 0.4.1

raw patch · 50 files changed

+2014/−650 lines, 50 filesdep +Hoeddep +QuickCheckdep +clockdep −filepathdep −mtldep −regex-posixPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: Hoed, QuickCheck, clock, deepseq, regex-tdfa, semigroups, strict, template-haskell, terminal-size, uniplate, vector

Dependencies removed: filepath, mtl, regex-posix, time

API changes (from Hackage documentation)

- Debug.Hoed: [stmtRes] :: CompStmt -> String
- Debug.Hoed: nothunk :: a -> ObserverM a
+ Debug.Hoed: HoedAnalysis :: [Event] -> CompTree -> HoedAnalysis
+ Debug.Hoed: HoedOptions :: Verbosity -> Int -> HoedOptions
+ Debug.Hoed: [hoedCompTree] :: HoedAnalysis -> CompTree
+ Debug.Hoed: [hoedTrace] :: HoedAnalysis -> [Event]
+ Debug.Hoed: [prettyWidth] :: HoedOptions -> Int
+ Debug.Hoed: [stmtDetails] :: CompStmt -> !StmtDetails
+ Debug.Hoed: [verbose] :: HoedOptions -> Verbosity
+ Debug.Hoed: data HoedAnalysis
+ Debug.Hoed: data HoedOptions
+ Debug.Hoed: defaultHoedOptions :: HoedOptions
+ Debug.Hoed: instance Debug.Hoed.Observe.Observable a
+ Debug.Hoed: runOwith :: HoedOptions -> IO a -> IO ()
+ Debug.Hoed.CompTree: CVRoot :: ConstantValue
+ Debug.Hoed.CompTree: ConstantValue :: !UID -> !Location -> !UID -> !UID -> ConstantValue
+ Debug.Hoed.CompTree: Graph :: vertex -> [vertex] -> [Arc vertex arc] -> Graph vertex arc
+ Debug.Hoed.CompTree: RootVertex :: Vertex
+ Debug.Hoed.CompTree: TraceInfo :: !SpanZipper -> !Dependencies -> TraceInfo
+ Debug.Hoed.CompTree: Vertex :: CompStmt -> Judgement -> Vertex
+ Debug.Hoed.CompTree: [arcs] :: Graph vertex arc -> [Arc vertex arc]
+ Debug.Hoed.CompTree: [computations] :: TraceInfo -> !SpanZipper
+ Debug.Hoed.CompTree: [dependencies] :: TraceInfo -> !Dependencies
+ Debug.Hoed.CompTree: [root] :: Graph vertex arc -> vertex
+ Debug.Hoed.CompTree: [valLoc] :: ConstantValue -> !Location
+ Debug.Hoed.CompTree: [valMax] :: ConstantValue -> !UID
+ Debug.Hoed.CompTree: [valMin] :: ConstantValue -> !UID
+ Debug.Hoed.CompTree: [valStmt] :: ConstantValue -> !UID
+ Debug.Hoed.CompTree: [vertexJmt] :: Vertex -> Judgement
+ Debug.Hoed.CompTree: [vertexStmt] :: Vertex -> CompStmt
+ Debug.Hoed.CompTree: [vertices] :: Graph vertex arc -> [vertex]
+ Debug.Hoed.CompTree: data ConstantValue
+ Debug.Hoed.CompTree: data Graph vertex arc :: * -> * -> *
+ Debug.Hoed.CompTree: data TraceInfo
+ Debug.Hoed.CompTree: data Vertex
+ Debug.Hoed.CompTree: getJudgement :: Vertex -> Judgement
+ Debug.Hoed.CompTree: instance GHC.Classes.Eq Debug.Hoed.CompTree.ConstantValue
+ Debug.Hoed.CompTree: instance GHC.Classes.Eq Debug.Hoed.CompTree.TopLvlFun
+ Debug.Hoed.CompTree: instance GHC.Classes.Eq Debug.Hoed.CompTree.Vertex
+ Debug.Hoed.CompTree: instance GHC.Classes.Ord Debug.Hoed.CompTree.Vertex
+ Debug.Hoed.CompTree: instance GHC.Generics.Generic Debug.Hoed.CompTree.Vertex
+ Debug.Hoed.CompTree: instance GHC.Show.Show Debug.Hoed.CompTree.ConstantValue
+ Debug.Hoed.CompTree: instance GHC.Show.Show Debug.Hoed.CompTree.TraceInfo
+ Debug.Hoed.CompTree: instance GHC.Show.Show Debug.Hoed.CompTree.Vertex
+ Debug.Hoed.CompTree: isAssisted :: Vertex -> Bool
+ Debug.Hoed.CompTree: isInconclusive :: Vertex -> Bool
+ Debug.Hoed.CompTree: isPassing :: Vertex -> Bool
+ Debug.Hoed.CompTree: isRight :: Vertex -> Bool
+ Debug.Hoed.CompTree: isRootVertex :: Vertex -> Bool
+ Debug.Hoed.CompTree: isUnassessed :: Vertex -> Bool
+ Debug.Hoed.CompTree: isWrong :: Vertex -> Bool
+ Debug.Hoed.CompTree: leafs :: CompTree -> [Vertex]
+ Debug.Hoed.CompTree: mkCompTree :: [CompStmt] -> Dependencies -> CompTree
+ Debug.Hoed.CompTree: replaceVertex :: CompTree -> Vertex -> CompTree
+ Debug.Hoed.CompTree: setJudgement :: Vertex -> Judgement -> Vertex
+ Debug.Hoed.CompTree: traceInfo :: Int -> Trace -> TraceInfo
+ Debug.Hoed.CompTree: type CompTree = Graph Vertex ()
+ Debug.Hoed.CompTree: unjudgedCharacterCount :: CompTree -> Int
+ Debug.Hoed.CompTree: vertexRes :: Vertex -> String
+ Debug.Hoed.CompTree: vertexUID :: Vertex -> UID
+ Debug.Hoed.Observe: (<<) :: (Observable a) => ObserverM (a -> b) -> a -> ObserverM b
+ Debug.Hoed.Observe: Cons :: !Int -> !String -> Change
+ Debug.Hoed.Observe: Enter :: Change
+ Debug.Hoed.Observe: Event :: !UID -> !Parent -> !Change -> Event
+ Debug.Hoed.Observe: Fun :: Change
+ Debug.Hoed.Observe: O :: (forall a. (Observable a) => String -> a -> a) -> Observer
+ Debug.Hoed.Observe: Observe :: !String -> Change
+ Debug.Hoed.Observe: ObserverM :: (Int -> Int -> (a, Int)) -> ObserverM a
+ Debug.Hoed.Observe: Parent :: !UID -> !ParentPosition -> Parent
+ Debug.Hoed.Observe: [change] :: Event -> !Change
+ Debug.Hoed.Observe: [eventParent] :: Event -> !Parent
+ Debug.Hoed.Observe: [eventUID] :: Event -> !UID
+ Debug.Hoed.Observe: [parentPosition] :: Parent -> !ParentPosition
+ Debug.Hoed.Observe: [parentUID] :: Parent -> !UID
+ Debug.Hoed.Observe: [runMO] :: ObserverM a -> Int -> Int -> (a, Int)
+ Debug.Hoed.Observe: badEvents :: Trace
+ Debug.Hoed.Observe: class GConstrain f
+ Debug.Hoed.Observe: class GObservable f
+ Debug.Hoed.Observe: class Observable a
+ Debug.Hoed.Observe: constrain :: (Observable a, Generic a, GConstrain (Rep a)) => a -> a -> a
+ Debug.Hoed.Observe: constrainBase :: (Show a, Eq a) => a -> a -> a
+ Debug.Hoed.Observe: data Change
+ Debug.Hoed.Observe: data Event
+ Debug.Hoed.Observe: data Parent
+ Debug.Hoed.Observe: endEventStream :: IO Trace
+ Debug.Hoed.Observe: evaluate :: a -> IO a
+ Debug.Hoed.Observe: events :: IORef Trace
+ Debug.Hoed.Observe: gconstrain :: GConstrain f => f a -> f a -> f a
+ Debug.Hoed.Observe: gdMapM :: (Monad m) => (a -> m a) -> m (a -> b) -> a -> m b
+ Debug.Hoed.Observe: gdmFunObserver :: (Observable a, Observable b) => Parent -> (a -> b) -> (a -> b)
+ Debug.Hoed.Observe: gdmObserveArgs :: GObservable f => f a -> ObserverM (f a)
+ Debug.Hoed.Observe: gdmShallowShow :: GObservable f => f a -> String
+ Debug.Hoed.Observe: gdmobserver :: GObservable f => f a -> Parent -> f a
+ Debug.Hoed.Observe: gdmobserver_ :: (GObservable f) => f a -> Parent -> f a
+ Debug.Hoed.Observe: generateContext :: (a -> Parent -> a) -> String -> a -> (a, Int)
+ Debug.Hoed.Observe: getUniq :: IO UID
+ Debug.Hoed.Observe: gobserve :: (a -> Parent -> a) -> String -> a -> (a, Int)
+ Debug.Hoed.Observe: gsendEnterPacket :: (GObservable f) => f a -> Parent -> f a
+ Debug.Hoed.Observe: gthunk :: (GObservable f) => f a -> ObserverM (f a)
+ Debug.Hoed.Observe: handleExc :: Parent -> SomeException -> IO a
+ Debug.Hoed.Observe: infixl 9 <<
+ Debug.Hoed.Observe: initUniq :: IO ()
+ Debug.Hoed.Observe: instance (Debug.Hoed.Fields.FieldLimit ('Debug.Hoed.Fields.S ('Debug.Hoed.Fields.S ('Debug.Hoed.Fields.S ('Debug.Hoed.Fields.S ('Debug.Hoed.Fields.S ('Debug.Hoed.Fields.S 'Debug.Hoed.Fields.Z)))))) a, Debug.Hoed.Observe.GObservable a) => Debug.Hoed.Observe.GObservable (GHC.Generics.M1 GHC.Generics.D d a)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.GConstrain a, Debug.Hoed.Observe.GConstrain b) => Debug.Hoed.Observe.GConstrain (a GHC.Generics.:*: b)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.GConstrain a, Debug.Hoed.Observe.GConstrain b) => Debug.Hoed.Observe.GConstrain (a GHC.Generics.:+: b)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.GConstrain a, GHC.Generics.Constructor c) => Debug.Hoed.Observe.GConstrain (GHC.Generics.M1 GHC.Generics.C c a)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.GConstrain a, GHC.Generics.Selector s) => Debug.Hoed.Observe.GConstrain (GHC.Generics.M1 GHC.Generics.S s a)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.GObservable a, Debug.Hoed.Observe.GObservable b) => Debug.Hoed.Observe.GObservable (a GHC.Generics.:*: b)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.GObservable a, Debug.Hoed.Observe.GObservable b) => Debug.Hoed.Observe.GObservable (a GHC.Generics.:+: b)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.GObservable a, GHC.Generics.Constructor c) => Debug.Hoed.Observe.GObservable (GHC.Generics.M1 GHC.Generics.C c a)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.GObservable a, GHC.Generics.Selector s) => Debug.Hoed.Observe.GObservable (GHC.Generics.M1 GHC.Generics.S s a)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.Observable a, Debug.Hoed.Observe.Observable b) => Debug.Hoed.Observe.Observable (Data.Either.Either a b)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.Observable a, Debug.Hoed.Observe.Observable b) => Debug.Hoed.Observe.Observable (a -> b)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.Observable a, Debug.Hoed.Observe.Observable b) => Debug.Hoed.Observe.Observable (a, b)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.Observable a, Debug.Hoed.Observe.Observable b, Debug.Hoed.Observe.Observable c) => Debug.Hoed.Observe.Observable (a, b, c)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.Observable a, Debug.Hoed.Observe.Observable b, Debug.Hoed.Observe.Observable c, Debug.Hoed.Observe.Observable d) => Debug.Hoed.Observe.Observable (a, b, c, d)
+ Debug.Hoed.Observe: instance (Debug.Hoed.Observe.Observable a, Debug.Hoed.Observe.Observable b, Debug.Hoed.Observe.Observable c, Debug.Hoed.Observe.Observable d, Debug.Hoed.Observe.Observable e) => Debug.Hoed.Observe.Observable (a, b, c, d, e)
+ Debug.Hoed.Observe: instance (GHC.Arr.Ix a, Debug.Hoed.Observe.Observable a, Debug.Hoed.Observe.Observable b) => Debug.Hoed.Observe.Observable (GHC.Arr.Array a b)
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.GConstrain GHC.Generics.U1
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.GConstrain a => Debug.Hoed.Observe.GConstrain (GHC.Generics.M1 GHC.Generics.D d a)
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.GObservable GHC.Generics.U1
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable ()
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable Data.Dynamic.Dynamic
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable GHC.Exception.SomeException
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable GHC.Integer.Type.Integer
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable GHC.Types.Bool
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable GHC.Types.Char
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable GHC.Types.Double
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable GHC.Types.Float
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable GHC.Types.Int
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable a => Debug.Hoed.Observe.GConstrain (GHC.Generics.K1 i a)
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable a => Debug.Hoed.Observe.GObservable (GHC.Generics.K1 i a)
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable a => Debug.Hoed.Observe.Observable (GHC.Base.Maybe a)
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable a => Debug.Hoed.Observe.Observable (GHC.Types.IO a)
+ Debug.Hoed.Observe: instance Debug.Hoed.Observe.Observable a => Debug.Hoed.Observe.Observable [a]
+ Debug.Hoed.Observe: instance GHC.Base.Applicative Debug.Hoed.Observe.ObserverM
+ Debug.Hoed.Observe: instance GHC.Base.Functor Debug.Hoed.Observe.ObserverM
+ Debug.Hoed.Observe: instance GHC.Base.Monad Debug.Hoed.Observe.ObserverM
+ Debug.Hoed.Observe: instance GHC.Classes.Eq Debug.Hoed.Observe.Change
+ Debug.Hoed.Observe: instance GHC.Classes.Eq Debug.Hoed.Observe.Event
+ Debug.Hoed.Observe: instance GHC.Classes.Eq Debug.Hoed.Observe.Parent
+ Debug.Hoed.Observe: instance GHC.Generics.Generic Debug.Hoed.Observe.Change
+ Debug.Hoed.Observe: instance GHC.Generics.Generic Debug.Hoed.Observe.Event
+ Debug.Hoed.Observe: instance GHC.Generics.Generic Debug.Hoed.Observe.Parent
+ Debug.Hoed.Observe: instance GHC.Show.Show Debug.Hoed.Observe.Change
+ Debug.Hoed.Observe: instance GHC.Show.Show Debug.Hoed.Observe.Event
+ Debug.Hoed.Observe: instance GHC.Show.Show Debug.Hoed.Observe.Parent
+ Debug.Hoed.Observe: isRootEvent :: Event -> Bool
+ Debug.Hoed.Observe: newtype Observer
+ Debug.Hoed.Observe: newtype ObserverM a
+ Debug.Hoed.Observe: observe :: (Observable a) => String -> a -> a
+ Debug.Hoed.Observe: observeBase :: (Show a) => a -> Parent -> a
+ Debug.Hoed.Observe: observeOpaque :: String -> a -> Parent -> a
+ Debug.Hoed.Observe: observer :: (Observable a, Generic a, GObservable (Rep a)) => a -> Parent -> a
+ Debug.Hoed.Observe: observer_ :: (a -> Parent -> a) -> a -> Parent -> a
+ Debug.Hoed.Observe: ourCatchAllIO :: IO a -> (SomeException -> IO a) -> IO a
+ Debug.Hoed.Observe: peepUniq :: IO UID
+ Debug.Hoed.Observe: root :: Parent
+ Debug.Hoed.Observe: send :: String -> ObserverM a -> Parent -> a
+ Debug.Hoed.Observe: sendEnterPacket :: (a -> Parent -> a) -> a -> Parent -> a
+ Debug.Hoed.Observe: sendEvent :: Int -> Parent -> Change -> IO ()
+ Debug.Hoed.Observe: sendObserveFnPacket :: ObserverM a -> Parent -> a
+ Debug.Hoed.Observe: startEventStream :: IO ()
+ Debug.Hoed.Observe: thunk :: (a -> Parent -> a) -> a -> ObserverM a
+ Debug.Hoed.Observe: type Observing a = a -> a
+ Debug.Hoed.Observe: type ParentPosition = Int
+ Debug.Hoed.Observe: type Trace = [Event]
+ Debug.Hoed.Observe: type UID = Int
+ Debug.Hoed.Observe: uniq :: IORef UID
+ Debug.Hoed.Observe: unsafeWithUniq :: (Int -> IO a) -> a
+ Debug.Hoed.Render: CompStmt :: !String -> !UID -> !StmtDetails -> CompStmt
+ Debug.Hoed.Render: StmtCon :: !String -> !String -> StmtDetails
+ Debug.Hoed.Render: StmtLam :: ![String] -> !String -> !String -> StmtDetails
+ Debug.Hoed.Render: [stmtCon] :: StmtDetails -> !String
+ Debug.Hoed.Render: [stmtDetails] :: CompStmt -> !StmtDetails
+ Debug.Hoed.Render: [stmtIdentifier] :: CompStmt -> !UID
+ Debug.Hoed.Render: [stmtLabel] :: CompStmt -> !String
+ Debug.Hoed.Render: [stmtLamArgs] :: StmtDetails -> ![String]
+ Debug.Hoed.Render: [stmtLamRes] :: StmtDetails -> !String
+ Debug.Hoed.Render: [stmtPretty] :: StmtDetails -> !String
+ Debug.Hoed.Render: data CDS
+ Debug.Hoed.Render: data CompStmt
+ Debug.Hoed.Render: data StmtDetails
+ Debug.Hoed.Render: eventsToCDS :: [Event] -> CDSSet
+ Debug.Hoed.Render: instance Control.DeepSeq.NFData Debug.Hoed.Render.CDS
+ Debug.Hoed.Render: instance Control.DeepSeq.NFData Debug.Hoed.Render.CompStmt
+ Debug.Hoed.Render: instance Control.DeepSeq.NFData Debug.Hoed.Render.StmtDetails
+ Debug.Hoed.Render: instance GHC.Classes.Eq Debug.Hoed.Render.CDS
+ Debug.Hoed.Render: instance GHC.Classes.Eq Debug.Hoed.Render.CompStmt
+ Debug.Hoed.Render: instance GHC.Classes.Eq Debug.Hoed.Render.Output
+ Debug.Hoed.Render: instance GHC.Classes.Ord Debug.Hoed.Render.CDS
+ Debug.Hoed.Render: instance GHC.Classes.Ord Debug.Hoed.Render.CompStmt
+ Debug.Hoed.Render: instance GHC.Classes.Ord Debug.Hoed.Render.Output
+ Debug.Hoed.Render: instance GHC.Generics.Generic Debug.Hoed.Render.CDS
+ Debug.Hoed.Render: instance GHC.Generics.Generic Debug.Hoed.Render.CompStmt
+ Debug.Hoed.Render: instance GHC.Generics.Generic Debug.Hoed.Render.StmtDetails
+ Debug.Hoed.Render: instance GHC.Show.Show Debug.Hoed.Render.CDS
+ Debug.Hoed.Render: instance GHC.Show.Show Debug.Hoed.Render.CompStmt
+ Debug.Hoed.Render: instance GHC.Show.Show Debug.Hoed.Render.Output
+ Debug.Hoed.Render: noNewlines :: String -> String
+ Debug.Hoed.Render: renderCompStmts :: (?statementWidth :: Int) => CDSSet -> [CompStmt]
+ Debug.Hoed.Render: sortOn :: Ord b => (a -> b) -> [a] -> [a]
+ Debug.Hoed.Render: stmtRes :: CompStmt -> String
+ Debug.Hoed.TH: debug :: Q [Dec] -> Q [Dec]
+ Debug.Hoed.TH: obs :: Q [Dec] -> Q [Dec]
- Debug.Hoed: CompStmt :: String -> UID -> String -> CompStmt
+ Debug.Hoed: CompStmt :: !String -> !UID -> !StmtDetails -> CompStmt
- Debug.Hoed: [stmtIdentifier] :: CompStmt -> UID
+ Debug.Hoed: [stmtIdentifier] :: CompStmt -> !UID
- Debug.Hoed: [stmtLabel] :: CompStmt -> String
+ Debug.Hoed: [stmtLabel] :: CompStmt -> !String
- Debug.Hoed: class Observable a where observer x c = to (gdmobserver (from x) c) constrain x c = to (gconstrain (from x) (from c))
+ Debug.Hoed: class Observable a
- Debug.Hoed: class ParEq a where parEq x y = gParEq (from x) (from y)
+ Debug.Hoed: class ParEq a
- Debug.Hoed: runO' :: Verbosity -> IO a -> IO (Trace, TraceInfo, CompTree, EventForest)
+ Debug.Hoed: runO' :: HoedOptions -> IO a -> IO HoedAnalysis
- Debug.NoHoed: class Generic a where type Rep a :: * -> * where {
+ Debug.NoHoed: class Generic a where {
- Debug.NoHoed: class Observable a where observer x _ = x constrain x _ = x
+ Debug.NoHoed: class Observable a
- Debug.NoHoed: constrain :: (Observable a, Generic a) => a -> a -> a
+ Debug.NoHoed: constrain :: (Observable a, (Generic a)) => a -> a -> a
- Debug.NoHoed: observer :: (Observable a, Generic a) => a -> Parent -> a
+ Debug.NoHoed: observer :: (Observable a, (Generic a)) => a -> Parent -> a

Files

Debug/Hoed.hs view
@@ -1,7 +1,13 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE ImplicitParams  #-}+{-# LANGUAGE RecordWildCards #-}+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}+{-# OPTIONS_GHC -fno-warn-type-defaults #-} {-| Module      : Debug.Hoed Description : Lighweight algorithmic debugging based on observing intermediate values.-Copyright   : (c) 2000 Andy Gill, (c) 2010 University of Kansas, (c) 2013-2017 Maarten Faddegon+Copyright   : (c) 2000 Andy Gill, (c) 2010 University of Kansas, (c) 2013-2018 Maarten Faddegon License     : BSD3 Maintainer  : hoed@maartenfaddegon.nl Stability   : experimental@@ -9,10 +15,19 @@  Hoed is a tracer and debugger for the programming language Haskell. -Hoed is recommended over Hoed.Stk: in contrast to Hoed.Stk you can optimize your program and do not need to enable profiling when using Hoed.+To locate a defect with Hoed you annotate suspected functions and compile as usual. Then you run your program, information about the annotated functions is collected. Finally you connect to a debugging session using a console. -To locate a defect with Hoed you annotate suspected functions and compile as usual. Then you run your program, information about the annotated functions is collected. Finally you connect to a debugging session using a webbrowser.+With Hoed you can list and search observed functions applied to argument values and the result values. +Hoed also provides algorithmic debugging.+An algorithmic debugger finds defects in programs by systematic search. +The programmer directs the search by answering a series of yes/no questions about+the correctness of specific function applications and their results.+Hoed also allows the use of (QuickCheck-style) properties to answer automatically+some of the questions arising during algorithmic debugging, and to replace others+by simpler questions. += Example usage+ Let us consider the following program, a defective implementation of a parity function with a test property.  > import Test.QuickCheck@@ -69,21 +84,48 @@ > main :: IO () > main = printO (prop_isOdd 1) -After running the program a computation tree is constructed and displayed in a web browser.+After running the program a computation tree is constructed and the algorithmic debugger is launched in the console. -> ./MyProgram-> False-> Listening on http://127.0.0.1:10000/+@ -After running the program a computation tree is constructed and displayed in a-web browser. You can freely browse this tree to get a better understanding of-your program. If your program misbehaves, you can judge the computation-statements in the tree as 'right' or 'wrong' according to your intention. When-enough statements are judged the debugger tells you the location of the fault-in your code.+False -<<https://raw.githubusercontent.com/MaartenFaddegon/Hoed/master/screenshots/AlgorithmicDebugging.png>>+=== program terminated ===+Please wait while the computation tree is constructed... +=== Statistics ===++28 events+4 computation statements+4 nodes + 1 virtual root node in the computation tree+4 edges in computation tree+computation tree has a branch factor of 1.3333333333333333 (i.e the average number of children of non-leaf nodes)++=== Debug Session ===++hdb> adb+======================================================================= [0-0/4]+isOdd 3  = False+? +right  Judge computation statements right+        according to the intended behaviour/specification of the function.+wrong  Judge computation statements wrong+        according to the intended behaviour/specification of the function.+======================================================================= [0-0/4]+isOdd 3  = False+? wrong+======================================================================= [1-0/4]+isEven 4  = False+? wrong+======================================================================= [2-0/4]+mod2 4  = 2+? wrong+======================================================================= [3-0/4]+Fault located! In:+mod2 4  = 2+hdb>+@+ Read more about Hoed on its project homepage <https://wiki.haskell.org/Hoed>.  Papers on the theory behind Hoed can be obtained via <http://maartenfaddegon.nl/#pub>.@@ -91,7 +133,7 @@ I am keen to hear about your experience with Hoed: where did you find it useful and where would you like to see improvement? You can send me an e-mail at hoed@maartenfaddegon.nl, or use the github issue tracker <https://github.com/MaartenFaddegon/hoed/issues>. -} -{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP             #-}  module Debug.Hoed   ( -- * Basic annotations@@ -99,6 +141,9 @@   , runO   , printO   , testO+  , runOwith+  , HoedOptions(..)+  , defaultHoedOptions    -- * Property-assisted algorithmic debugging   , runOwp@@ -122,10 +167,11 @@   , conAp    -- * Build your own debugger with Hoed+  , HoedAnalysis(..)   , runO'   , judge   , unjudgedCharacterCount-  , CompTree(..)+  , CompTree   , Vertex(..)   , CompStmt(..)   , Judge(..)@@ -142,47 +188,37 @@   , Observable(..)   , (<<)   , thunk-  , nothunk   , send   , observeOpaque   , observeBase   , constrainBase   , debugO-  , CDS(..)+  , CDS   , Generic   ) where +import Control.DeepSeq+import           Debug.Hoed.CompTree+import           Debug.Hoed.Console+import           Debug.Hoed.Observe+import           Debug.Hoed.Prop+import           Debug.Hoed.Render+import           Debug.Hoed.Serialize -import Debug.Hoed.Observe-import Debug.Hoed.Render-import Debug.Hoed.EventForest-import Debug.Hoed.CompTree-import Debug.Hoed.Console-import Debug.Hoed.Prop-import Debug.Hoed.Serialize-import Paths_Hoed(getDataDir)+import           Data.IORef+import           Prelude                      hiding (Right)+import           System.Clock+import           System.Console.Terminal.Size+import           System.Directory             (createDirectoryIfMissing)+import           System.IO+import           System.IO.Unsafe -import Prelude hiding (Right)-import qualified Prelude-import System.Process(system)-import System.IO-import Data.Maybe-import Control.Monad-import Data.List-import Data.Ord-import Data.Char-import System.Environment-import System.Directory(createDirectoryIfMissing)+import           GHC.Generics -import GHC.Generics+import           Data.Graph.Libgraph -import Data.IORef-import System.IO.Unsafe-import Data.Graph.Libgraph -import System.Directory(createDirectoryIfMissing) - -- %************************************************************************ -- %*                                                                   * -- \subsection{External start functions}@@ -195,10 +231,12 @@ runOnce :: IO () runOnce = do   f <- readIORef firstRun-  case f of True  -> writeIORef firstRun False-            False -> error "It is best not to run Hoed more that once (maybe you want to restart GHCI?)"+  if f+    then writeIORef firstRun False+    else error "It is best not to run Hoed more that once (maybe you want to restart GHCI?)"  firstRun :: IORef Bool+{-# NOINLINE firstRun #-} firstRun = unsafePerformIO $ newIORef True  @@ -209,7 +247,7 @@         ; initUniq         ; startEventStream         ; let errorMsg e = "[Escaping Exception in Code : " ++ show e ++ "]"-        ; ourCatchAllIO (do { program ; return () })+        ; ourCatchAllIO (do { _ <- program ; return () })                         (hPutStrLn stderr . errorMsg)         ; endEventStream         }@@ -227,36 +265,41 @@  runO :: IO a -> IO () runO program = do-  (trace,traceInfo,compTree,frt) <- runO' Verbose program-  debugSession trace compTree []-  return ()+  window <- size+  let w = maybe (prettyWidth defaultHoedOptions) width window+  runOwith defaultHoedOptions{prettyWidth=w, verbose=Verbose} program +runOwith :: HoedOptions -> IO a -> IO ()+runOwith options program = do+  HoedAnalysis{..} <- runO' options program+  debugSession hoedTrace hoedCompTree []+  return ()  -- | Hoed internal function that stores a serialized version of the tree on disk (assisted debugging spawns new instances of Hoed). runOstore :: String -> IO a -> IO ()-runOstore tag program = do -  (trace,traceInfo,compTree,frt) <- runO' Silent program-  storeTree (treeFilePath ++ tag) compTree-  storeTrace (traceFilePath ++ tag) trace+runOstore tag program = do+  HoedAnalysis{..} <- runO' defaultHoedOptions{verbose=Silent} program+  storeTree (treeFilePath ++ tag) hoedCompTree+  storeTrace (traceFilePath ++ tag) hoedTrace  -- | Repeat and trace a failing testcase testO :: Show a => (a->Bool) -> a -> IO ()-testO p x = runO $ putStrLn $ if (p x) then "Passed 1 test."-                                       else " *** Failed! Falsifiable: " ++ show x+testO p x = runO $ putStrLn $ if p x then "Passed 1 test."+                                     else " *** Failed! Falsifiable: " ++ show x  -- | Use property based judging.  runOwp :: [Propositions] -> IO a -> IO () runOwp ps program = do-  (trace,traceInfo,compTree,frt) <- runO' Verbose program-  let compTree' = compTree-  debugSession trace compTree' ps+  HoedAnalysis{..} <- runO' defaultHoedOptions{verbose=Verbose} program+  let compTree' = hoedCompTree+  debugSession hoedTrace compTree' ps   return ()  -- | Repeat and trace a failing testcase testOwp :: Show a => [Propositions] -> (a->Bool) -> a -> IO ()-testOwp ps p x = runOwp ps $ putStrLn $ -  if (p x) then "Passed 1 test."+testOwp ps p x = runOwp ps $ putStrLn $+  if p x then "Passed 1 test."   else " *** Failed! Falsifiable: " ++ show x  -- | Short for @runO . print@.@@ -270,58 +313,81 @@ -- | Only produces a trace. Useful for performance measurements. traceOnly :: IO a -> IO () traceOnly program = do-  debugO program+  _ <- debugO program   return ()   data Verbosity = Verbose | Silent  condPutStrLn :: Verbosity -> String -> IO ()-condPutStrLn Silent _  = return ()+condPutStrLn Silent _    = return () condPutStrLn Verbose msg = hPutStrLn stderr msg +data HoedAnalysis = HoedAnalysis+  { hoedTrace       :: [Event]+  , hoedCompTree    :: CompTree+  }++data HoedOptions = HoedOptions+  { verbose     :: Verbosity+  , prettyWidth :: Int+  }++defaultHoedOptions :: HoedOptions+defaultHoedOptions = HoedOptions Silent 110+ -- |Entry point giving you access to the internals of Hoed. Also see: runO.-runO' :: Verbosity -> IO a -> IO (Trace,TraceInfo,CompTree,EventForest)-runO' verbose program = do+runO' :: HoedOptions -> IO a -> IO HoedAnalysis+runO' HoedOptions{..} program = let ?statementWidth = prettyWidth in do   createDirectoryIfMissing True ".Hoed/"+  t1 <- getTime Monotonic   condPutStrLn verbose "=== program output ===\n"   events <- debugO program-  condPutStrLn verbose"\n=== program terminated ==="+  t2 <- getTime Monotonic+  let programTime = toSecs(diffTimeSpec t1 t2)+  condPutStrLn verbose $ "\n=== program terminated (" ++ show programTime ++ " seconds) ==="   condPutStrLn verbose"Please wait while the computation tree is constructed..." -  let cdss = eventsToCDS events-  let cdss1 = rmEntrySet cdss-  let cdss2 = simplifyCDSSet cdss1-  let eqs   = renderCompStmts cdss2+  let e = length events -  let frt  = mkEventForest events-      ti   = traceInfo (reverse events)-      ds   = dependencies ti-      ct   = mkCompTree eqs ds+  condPutStrLn verbose "\n=== Statistics ===\n"+  condPutStrLn verbose $ show e ++ " events" +  let !cdss = eventsToCDS events+      !eqs  = force $ renderCompStmts cdss+      ti   = traceInfo e (reverse events)+      !ds  = force $ dependencies ti+      ct  = mkCompTree eqs ds++#if defined(DEBUG)   writeFile ".Hoed/Events"     (unlines . map show . reverse $ events)+  writeFile ".Hoed/Cdss"       (unlines . map show $ cdss2)+  writeFile ".Hoed/Eqs"        (unlines . map show $ eqs)+#endif #if defined(TRANSCRIPT)   writeFile ".Hoed/Transcript" (getTranscript events ti) #endif-  -  condPutStrLn verbose "\n=== Statistics ===\n"-  let e  = length events-      n  = length eqs++  let n  = length eqs       b  = fromIntegral (length . arcs $ ct ) / fromIntegral ((length . vertices $ ct) - (length . leafs $ ct))-  condPutStrLn verbose $ show e ++ " events"   condPutStrLn verbose $ show n ++ " computation statements"   condPutStrLn verbose $ show ((length . vertices $ ct) - 1) ++ " nodes + 1 virtual root node in the computation tree"   condPutStrLn verbose $ show (length . arcs $ ct) ++ " edges in computation tree"   condPutStrLn verbose $ "computation tree has a branch factor of " ++ show b ++ " (i.e the average number of children of non-leaf nodes)" -  condPutStrLn verbose "\n=== Debug Session ===\n"-  return (events, ti, ct, frt)+  t3 <- getTime Monotonic+  let compTime = toSecs(diffTimeSpec t2 t3)+  condPutStrLn verbose $ "\n=== Debug Session (" ++ show compTime ++ " seconds) ===\n"+  return $ HoedAnalysis events ct+    where+       toSecs :: TimeSpec -> Double+       toSecs spec = fromIntegral(sec spec) + fromIntegral(nsec spec) * 1e-9  -- | Trace and write computation tree to file. Useful for regression testing. logO :: FilePath -> IO a -> IO () logO filePath program = {- SCC "logO" -} do-  (_,_,compTree,_) <- runO' Verbose program-  writeFile filePath (showGraph compTree)+  HoedAnalysis{..} <- runO' defaultHoedOptions{verbose=Verbose} program+  writeFile filePath (showGraph hoedCompTree)   return ()    where showGraph g        = showWith g showVertex showArc@@ -333,9 +399,9 @@ -- | As logO, but with property-based judging. logOwp :: UnevalHandler -> FilePath -> [Propositions] -> IO a -> IO () logOwp handler filePath properties program = do-  (trace,traceInfo,compTree,frt) <- runO' Verbose program+  HoedAnalysis{..} <- runO' defaultHoedOptions{verbose=Verbose} program   hPutStrLn stderr "\n=== Evaluating assigned properties ===\n"-  compTree' <- judgeAll handler unjudgedCharacterCount trace properties compTree+  compTree' <- judgeAll handler unjudgedCharacterCount hoedTrace properties hoedCompTree   writeFile filePath (showGraph compTree')   return () @@ -344,3 +410,11 @@         showVertex v       = ("\"" ++ (escape . showCompStmt) v ++ "\"", "")         showArc _          = ""         showCompStmt s     = (show . vertexJmt) s ++ ": " ++ (show . vertexStmt) s+++#if __GLASGOW_HASKELL__ >= 710+-- A catch-all instance for non observable types+instance {-# OVERLAPPABLE #-} Observable a where+  observer = observeOpaque "<?>"+  constrain _ _ = error "constrained by untraced value"+#endif
Debug/Hoed/CompTree.hs view
@@ -1,8 +1,19 @@+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiWayIf            #-} -- This file is part of the Haskell debugger Hoed. -- -- Copyright (c) Maarten Faddegon, 2015 -{-# LANGUAGE CPP, DeriveGeneric #-}+{-# LANGUAGE BangPatterns          #-}+{-# LANGUAGE CPP                   #-}+{-# LANGUAGE DeriveGeneric         #-}+{-# LANGUAGE FlexibleInstances     #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedLists       #-}+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}  module Debug.Hoed.CompTree ( CompTree@@ -22,7 +33,6 @@ , isPassing , leafs , ConstantValue(..)-, getLocation , unjudgedCharacterCount #if defined(TRANSCRIPT) , getTranscript@@ -31,19 +41,30 @@ , traceInfo , Graph(..) -- re-export from LibGraph )where--import Debug.Hoed.Render-import Debug.Hoed.Observe-import Debug.Hoed.EventForest+import           Control.Exception+import           Control.Monad+import           Control.Monad.ST+import           Debug.Hoed.EventForest+import           Debug.Hoed.Observe+import           Debug.Hoed.Span+import           Debug.Hoed.Render -import Prelude hiding (Right)-import Data.Graph.Libgraph-import Data.List(nub,delete,(\\))-import Data.IntMap.Strict (IntMap)-import qualified Data.IntMap.Strict as IntMap-import Data.IntSet (IntSet)-import qualified Data.IntSet as IntSet-import GHC.Generics+import           Data.Bits+import           Data.Graph.Libgraph+import qualified Data.Set               as Set+import           Data.IntMap.Strict     (IntMap)+import qualified Data.IntMap.Strict     as IntMap+import           Data.IntSet            (IntSet)+import           Data.List              (foldl', unfoldr)+import           Data.Maybe+import           Data.Semigroup+import           Data.Vector.Mutable as VM (STVector)+import qualified Data.Vector.Generic.Mutable as VM+import qualified Data.Vector.Unboxed    as U+import           Data.Word+import           GHC.Exts               (IsList (..))+import           GHC.Generics+import           Prelude                hiding (Right)  data Vertex = RootVertex | Vertex {vertexStmt :: CompStmt, vertexJmt :: Judgement}   deriving (Eq,Show,Ord,Generic)@@ -56,22 +77,30 @@ setJudgement RootVertex _ = RootVertex setJudgement v          j = v{vertexJmt=j} +isRight :: Vertex -> Bool isRight v      = getJudgement v == Right+isWrong :: Vertex -> Bool isWrong v      = getJudgement v == Wrong+isUnassessed :: Vertex -> Bool isUnassessed v = getJudgement v == Unassessed+isAssisted :: Vertex -> Bool isAssisted v   = case getJudgement v of (Assisted _) -> True; _ -> False +isInconclusive :: Vertex -> Bool isInconclusive v = case getJudgement v of   (Assisted ms) -> any isInconclusive' ms   _             -> False+isInconclusive' :: AssistedMessage -> Bool isInconclusive' (InconclusiveProperty _) = True isInconclusive' _                        = False +isPassing :: Vertex -> Bool isPassing v = case getJudgement v of   (Assisted ms) -> any isPassing' ms   _             -> False+isPassing' :: AssistedMessage -> Bool isPassing' (PassingProperty _) = True-isPassing' _                        = False+isPassing' _                   = False  vertexUID :: Vertex -> UID vertexUID RootVertex   = -1@@ -89,21 +118,25 @@ isRootVertex _          = False  leafs :: CompTree -> [Vertex]-leafs g = filter (\v -> succs g v == []) (vertices g)+leafs g = filter (not . (`Set.member` nonLeafs)) (vertices g)+  where+    nonLeafs = Set.fromList [s | Arc s t _ <- arcs g]  -- | 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. unjudgedCharacterCount :: CompTree -> Int-unjudgedCharacterCount = sum . (map characterCount) . (filter unjudged) . vertices+unjudgedCharacterCount = sum . map characterCount . filter unjudged . vertices   where characterCount = length . stmtLabel . vertexStmt +unjudged :: Vertex -> Bool unjudged = not . judged-judged v = (isRight v || isWrong v)+judged :: Vertex -> Bool+judged v = isRight v || isWrong v  replaceVertex :: CompTree -> Vertex -> CompTree replaceVertex g v = mapGraph f g   where f RootVertex = RootVertex-        f v' | (vertexUID v') == (vertexUID v) = v+        f v' | vertexUID v' == vertexUID v = v              | otherwise                       = v'  --------------------------------------------------------------------------------@@ -113,16 +146,16 @@ -- new information, often the information is just a duplicate of what we already -- know. With nub we remove the duplicates. -mkCompTree :: [CompStmt] -> [(UID,UID)] -> CompTree-mkCompTree cs ds = Graph RootVertex (vs) as+mkCompTree :: [CompStmt] -> Dependencies -> CompTree+mkCompTree cs ds = Graph RootVertex vs as -  where vs = RootVertex : map (\cs -> Vertex cs Unassessed) cs-        as = map (\(i,j) -> Arc (findVertex i) (findVertex j) ()) (nub ds)+  where vs = RootVertex : map (`Vertex` Unassessed) cs+        as = [Arc (findVertex i) (findVertex j) () | (i,jj) <- toList ds, j <- toList jj]          -- A mapping from stmtUID to Vertex of all CompStmts in cs         vMap :: IntMap Vertex         -- vMap = foldl (\m c -> let v = Vertex c Unassessed in foldl (\m' i -> IntMap.insert i v m') m (stmtUIDs c)) IntMap.empty cs-        vMap = foldl (\m c -> IntMap.insert (stmtIdentifier c) (Vertex c Unassessed) m) IntMap.empty cs+        vMap = foldl' (\m c -> IntMap.insert (stmtIdentifier c) (Vertex c Unassessed) m) IntMap.empty cs          -- Given an UID, get corresponding CompStmt (wrapped in a Vertex)         findVertex :: UID -> Vertex@@ -135,8 +168,8 @@  ------------------------------------------------------------------------------------------------------------------------ -data ConstantValue = ConstantValue { valStmt :: UID, valLoc :: Location-                                   , valMin :: UID,  valMax :: UID }+data ConstantValue = ConstantValue { valStmt :: !UID, valLoc :: !Location+                                   , valMin  :: !UID, valMax :: !UID }                    | CVRoot                   deriving Eq @@ -149,32 +182,53 @@  ------------------------------------------------------------------------------------------------------------------------ --- Add element x to the head of the list at key k.-insertCon :: Int -> a -> IntMap [a] -> IntMap [a]-insertCon k x = IntMap.insertWith (\[x'] xs->x':xs) k [x] -- where x == x'+newtype TopLvlFun = TopLvlFun UID deriving Eq +noTopLvlFun :: TopLvlFun+noTopLvlFun = TopLvlFun (-1)++data EventDetails = EventDetails+  { topLvlFun_   :: !TopLvlFun+              -- ^ references from the UID of an event to the UID of the corresponding top-level Fun event+  , locations   :: ParentPosition -> Bool+              -- ^ reference from parent UID and position to location+  }++topLvlFun :: EventDetails -> UID+topLvlFun EventDetails{topLvlFun_ = TopLvlFun x} = x++type EventDetailsStore s = VM.STVector s EventDetails++getEventDetails :: EventDetailsStore s -> UID -> ST s EventDetails+getEventDetails = VM.unsafeRead++setEventDetails :: EventDetailsStore s -> UID -> EventDetails -> ST s ()+setEventDetails = VM.unsafeWrite+++getTopLvlFunOr :: UID -> EventDetails -> UID+getTopLvlFunOr def EventDetails{topLvlFun_}+  | topLvlFun_ == noTopLvlFun = def+  | TopLvlFun x <- topLvlFun_ = x+ ------------------------------------------------------------------------------------------------------------------------ +type Dependencies = IntMap IntSet+ data TraceInfo = TraceInfo-  { topLvlFun      :: IntMap UID-                   -- references from the UID of an event to the UID of the corresponding top-level Fun event-  , locations      :: IntMap (ParentPosition -> Bool)-                   -- reference from parent UID and position to location-  , computations   :: Nesting+  { computations :: !SpanZipper                    -- UIDs of active and paused computations of arguments/results of Fun events+  , dependencies :: !Dependencies #if defined(TRANSCRIPT)-  , messages       :: IntMap String-                   -- stored depth of the stack for every event+  , messages     :: !(IntMap String)+              -- ^ stored depth of the stack for every event #endif-  , storedStack    :: IntMap [UID]-                   -- reference from parent UID and position to previous stack-  , dependencies   :: [(UID,UID)]-  }                -- the result-+  }+  deriving Show  -------------------------------------------------------------------------------------------------------------------------#if defined(TRANSCRIPT) addMessage :: Event -> String -> TraceInfo -> TraceInfo+#if defined(TRANSCRIPT) addMessage e msg s = s{ messages = (flip $ IntMap.insert i) (messages s) $ case IntMap.lookup i (messages s) of   Nothing     -> msg   (Just msg') -> msg' ++ ", " ++ msg }@@ -195,213 +249,151 @@   where m e = case IntMap.lookup (eventUID e) ms of           Nothing    -> ""           (Just msg) -> "\n  " ++ msg-        +         ms = messages t+#else+addMessage _ _ t = t #endif ------------------------------------------------------------------------------------------------------------------------ -getLocation :: Event -> TraceInfo -> Bool-getLocation e s = getLocation' p--  where p = parentPosition . eventParent $ e-        j = (parentUID . eventParent $ e)-        (Just getLocation') = (IntMap.lookup j (locations s))--setLocation :: Event -> (ParentPosition -> Bool) -> TraceInfo -> TraceInfo-setLocation e getLoc s = s{locations=IntMap.insert i getLoc (locations s)}--  where i = eventUID e--------------------------------------------------------------------------------------------------------------------------+collectEventDetails :: EventDetailsStore s -> Event -> ST s (Bool,UID)+collectEventDetails v e = do+            let !p = eventParent e+            parentDetails <- getEventDetails v (parentUID p)+            let !loc = locations parentDetails (parentPosition p)+                !top = getTopLvlFunOr (parentUID p) parentDetails+            return (loc, top)  -- When we see a Fun event whose parent is not a Fun event it is a top level Fun event, -- otherwise just copy the reference to the top level Fun event from the parent.--- A top leven Fun event references itself.-seeFun :: Event -> TraceInfo -> TraceInfo-seeFun e s = s{ topLvlFun=case IntMap.lookup j (topLvlFun s) of-                  Nothing  -> IntMap.insert i i (topLvlFun s)-                  (Just a) -> IntMap.insert i a (topLvlFun s)-              }--  where i = eventUID e-        j = parentUID . eventParent $ e---- Get the UID of the top-level Fun of the parent of event e-getTopLvlFun :: Event -> TraceInfo -> UID-getTopLvlFun e s = case IntMap.lookup j (topLvlFun s) of Nothing -> j; (Just a') -> a'--  where j = parentUID . eventParent $ e---- Copy top-level Fun reference from the parent of e-cpyTopLvlFun :: Event -> TraceInfo -> TraceInfo-cpyTopLvlFun e s = s{topLvlFun=IntMap.insert i a (topLvlFun s)}--  where i = eventUID e-        a = getTopLvlFun e s----------------------------------------------------------------------------------------------------------------------------data Span = Computing UID | Paused UID-type Nesting = [Span]--instance Show Span where-  show (Computing i) = show i-  show (Paused i)    = "(" ++ show i ++ ")"--showCs :: [Span] -> String-showCs []  = "< >"-showCs [c] = "< " ++ show c ++ " >"-showCs (c:cs) = foldl (\s c' -> s ++ ", " ++ show c') ("< " ++ show c) cs ++ " >"--getSpanUID (Computing j) = j-getSpanUID (Paused j)    = j--isSpan :: UID -> Span -> Bool-isSpan i s = i == getSpanUID s--start :: Event -> TraceInfo -> TraceInfo-start e s = m s{computations = cs}--  where i  = getTopLvlFun e s-        cs = Computing i : computations s-#if defined(TRANSCRIPT)-        m  = addMessage e $ "Start computation " ++ show i ++ ": " ++ showCs cs-#else-        m = id-#endif---stop :: Event -> TraceInfo -> TraceInfo-stop e s = m s{computations = cs}--  where i  = getTopLvlFun e s-        cs = deleteFirst (computations s)-        deleteFirst [] = []-        deleteFirst (s:ss) | isSpan i s = ss-                           | otherwise  = s : deleteFirst ss-#if defined(TRANSCRIPT)-        m  = addMessage e $ "Stop computation " ++ show i ++ ": " ++ showCs cs-#else-        m = id-#endif+-- A top level Fun event references itself.+mkFunDetails :: EventDetailsStore s -> Event -> ST s EventDetails+mkFunDetails s e = do+    let p = eventParent e+    ed  <- getEventDetails s (parentUID p)+    let !loc = locations ed (parentPosition p)+        !top = getTopLvlFunOr (eventUID e) ed+        locFun 0 = not loc+        locFun 1 = loc+    return $ EventDetails (TopLvlFun top) locFun +---------------------------------------------------------------------------- -pause :: Event -> TraceInfo -> TraceInfo-pause e s = m s{computations=cs}+start, stop,pause,resume :: Event -> EventDetails -> TraceInfo -> TraceInfo+start e ed s = m s{computations = cs}+  where i  = topLvlFun ed+        cs = startSpan i $ computations s+        m  = addMessage e $ "Start computation " ++ show i ++ ": " ++ show cs -  where i  = getTopLvlFun e s-        cs = case cs_post of-               []      -> cs_pre-               (c:cs') -> cs_pre ++ (Paused i) : cs'-        (cs_pre,cs_post)           = break isComputingI (computations s)-        isComputingI (Computing j) = i == j-        isComputingI _             = False-#if defined(TRANSCRIPT)-        m  = addMessage e $ "Pause computation " ++ show i ++ ": " ++ showCs cs-#else-        m = id-#endif+stop e ed s = m s {computations = cs'}+  where+    i = topLvlFun ed+    cs' = stopSpan i (computations s)+    m = addMessage e $ "Stop computation " ++ show i ++ ": " ++ show cs' -resume :: Event -> TraceInfo -> TraceInfo-resume e s = m s{computations=cs}+pause e ed s = m s {computations = cs'}+  where+    i = topLvlFun ed+    cs' = pauseSpan i (computations s)+    m = addMessage e $ "Pause up to " ++ show i ++ ": " ++ show cs' -  where i  = getTopLvlFun e s-        cs = case cs_post of-               []      -> cs_pre-               (c:cs') -> cs_pre ++ (Computing i) : cs'-        (cs_pre,cs_post)     = break isPausedI (computations s)-        isPausedI (Paused j) = i == j-        isPausedI _          = False-#if defined(TRANSCRIPT)-        m = addMessage e $ "Resume computation " ++ show i ++ ": " ++ showCs cs-#else-        m = id-#endif+resume e ed s = m s {computations = cs'}+  where+    i = topLvlFun ed+    cs' = resumeSpan i (computations s)+    m = addMessage e $ "Resume computation " ++ show i ++ ": " ++ show cs'  activeComputations :: TraceInfo -> [UID]-activeComputations s = map getSpanUID . filter isActive $ computations s+activeComputations s = map getSpanUID . filter isActive . toList $ computations s   where isActive (Computing _) = True         isActive _             = False - ------------------------------------------------------------------------------------------------------------------------  addDependency :: Event -> TraceInfo -> TraceInfo-addDependency e s = m s{dependencies = case d of (Just d') -> d':dependencies s; Nothing -> dependencies s}+addDependency _e s =+  m s{dependencies = case d of+         Just (from,to) -> IntMap.insertWith (<>) from [to] (dependencies s)+         Nothing -> dependencies s}    where d = case activeComputations s of-              []       -> Nothing-              [n]      -> Just (-1,n)  -- top-level function detected (may later add dependency from Root)-              (n:m:_)  -> Just (m,n)+              []      -> Nothing+              [n]     -> Just (-1, n)  -- top-level function detected (may later add dependency from Root)+              (n:m:_) -> Just (m, n) -#if defined(TRANSCRIPT)         m = case d of-             Nothing   -> addMessage e ("does not add dependency")-             (Just d') -> addMessage e ("adds dependency " ++ show (fst d') ++ " -> " ++ show (snd d'))-#else-        m = id-#endif+             Nothing       -> addMessage _e ("does not add dependency")+             (Just (a, b)) -> addMessage _e ("adds dependency " ++ show a ++ " -> " ++ show b)  ------------------------------------------------------------------------------------------------------------------------ -type ConsMap = IntMap [ParentPosition]+type ConsMap = U.Vector Word --- Iff an event is a constant then the UID of its parent and its ParentPosition--- are elements of the ConsMap.-mkConsMap :: Trace -> ConsMap-mkConsMap = foldl loop IntMap.empty-  where loop :: IntMap [ParentPosition] -> Event -> IntMap [ParentPosition]-        loop m e = case change e of-          Cons{} -> insertCon (parentUID . eventParent $ e) (parentPosition . eventParent $ e) m-          _      -> m+--- Iff an event is a constant then the UID of its parent and its ParentPosition+--- are elements of the ConsMap.+mkConsMap :: Int -> Trace -> ConsMap+mkConsMap l t =+  U.create $ do+    v <- VM.replicate l 0+    forM_ t $ \e ->+      case change e of+        Cons {} -> do+          let p = eventParent e+#if __GLASGOW_HASKELL__ >= 800+          VM.unsafeModify v (`setBit` parentPosition p) (parentUID p - 1)+#else+          let ix = parentUID p - 1+          x <- VM.unsafeRead v ix+          VM.unsafeWrite v ix (x `setBit` parentPosition p)+#endif+        _ -> return ()+    return v --- Return True for an enter event corresponding to a constant event and for any constant event, return False otherwise. corToCons :: ConsMap -> Event -> Bool-corToCons cs e = case IntMap.lookup j cs of-                    Nothing   -> False-                    (Just ps) -> p `elem` ps-  where j = (parentUID . eventParent $ e)-        p = parentPosition . eventParent $ e+corToCons cm e = case U.unsafeIndex cm (parentUID p - 1) of+                   0 -> False+                   other -> testBit other (parentPosition p)+  where p = eventParent e  ------------------------------------------------------------------------------------------------------------------------ -traceInfo :: Trace -> TraceInfo-traceInfo trc = foldl loop s0 trc--  where s0 :: TraceInfo-        s0 = TraceInfo IntMap.empty IntMap.empty [] +traceInfo :: Int -> Trace -> TraceInfo+traceInfo l trc = runST $ do+  -- Practically speaking, event UIDs start in 1+  v <- VM.replicate (l+1) $ EventDetails noTopLvlFun (const False)+  let loop !s e =+        case change e of+          Observe {} -> do+            setEventDetails v (eventUID e) (EventDetails noTopLvlFun (const True))+            return s+          Fun {} -> do+            setEventDetails v (eventUID e) =<< mkFunDetails v e+            return s+            -- Span start+          Enter {}+            | corToCons cs e -> do+              (loc, top) <- collectEventDetails v e+              let !details = EventDetails (TopLvlFun top) (const loc)+              setEventDetails v (eventUID e) details+              return $ if loc+                  then addDependency e . start e details $ s+                  else pause e details s+            | otherwise -> return s+            -- Span end+          Cons {} -> do+            (loc, top) <- collectEventDetails v e+            let !details = EventDetails (TopLvlFun top) (const loc)+            setEventDetails v (eventUID e) details+            return $ if loc+              then stop e details s+              else resume e details s+  foldM loop s0 trc+  where+    s0 :: TraceInfo+    s0 = TraceInfo [] [] #if defined(TRANSCRIPT)-                       IntMap.empty+           IntMap.empty #endif-                       IntMap.empty []--        cs :: ConsMap-        cs = mkConsMap trc--        loop :: TraceInfo -> Event -> TraceInfo-        loop s e = let loc = getLocation e s-                   in case change e of-                        Observe{} -> setLocation e (\_->True) s--                        Fun{}     -> setLocation e (\q->case q of 0 -> not loc; 1 -> loc)-                                     . seeFun e $ s--                        -- Span start-                        Enter{}   -> if not . corToCons cs $ e then s else cpyTopLvlFun e-                                     $ case loc of-                                          True  -> addDependency e-                                                   $ start e s-                                          False -> pause e s--                        NoEnter{} -> if not . corToCons cs $ e then s else cpyTopLvlFun e-                                     $ case loc of-                                          True  -> addDependency e-                                                   $ start e s-                                          False -> pause e s+    cs :: ConsMap+    cs = mkConsMap l trc -                        -- Span end-                        Cons{} ->  cpyTopLvlFun e-                                   . setLocation e (\_->loc)-                                   $ case loc of-                                       True  -> stop e s-                                       False -> resume e s
+ Debug/Hoed/Compat.hs view
@@ -0,0 +1,22 @@+{-# LANGUAGE CPP #-}+module Debug.Hoed.Compat (addConstraint, sortOn, (<$), (<$>)) where++import           Control.Applicative+import           Data.List+import           Language.Haskell.TH++#if __GLASGOW_HASKELL__ < 710+sortOn :: Ord b => (a -> b) -> [a] -> [a]+sortOn f  = map snd . sortOn' fst .  map (\x -> (f x, x))++sortOn' :: Ord b => (a -> b) -> [a] -> [a]+sortOn' f = sortBy (\x y -> compare (f x) (f y))+#endif++addConstraint :: Name -> [Type] -> Pred+addConstraint name args =+#if __GLASGOW_HASKELL__ < 710+      ClassP name args+#else+      foldl' AppT (ConT name) args+#endif
Debug/Hoed/Console.hs view
@@ -1,158 +1,311 @@+{-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE LambdaCase                #-}+{-# LANGUAGE NamedFieldPuns            #-}+{-# LANGUAGE OverloadedStrings         #-}+{-# LANGUAGE RecordWildCards           #-}+{-# LANGUAGE ScopedTypeVariables       #-} -- This file is part of the Haskell debugger Hoed. -- -- Copyright (c) Maarten Faddegon, 2014-2017-{-# LANGUAGE CPP #-} module Debug.Hoed.Console(debugSession) where-import qualified Prelude-import Prelude hiding(Right)-import Debug.Hoed.ReadLine-import Debug.Hoed.Observe-import Debug.Hoed.Render-import Debug.Hoed.CompTree-import Debug.Hoed.Prop-import Debug.Hoed.Serialize-import Text.Regex.Posix.String as Regex-import Text.Regex.Posix-import Text.Regex.Posix.String-import Data.Graph.Libgraph-import Data.List(findIndex,intersperse,nub,sort,sortBy-#if __GLASGOW_HASKELL__ >= 710-                , sortOn-#endif-                ) -#if __GLASGOW_HASKELL__ < 710-sortOn :: Ord b => (a -> b) -> [a] -> [a]-sortOn f  = map snd . sortOn' fst .  map (\x -> (f x, x))--sortOn' :: Ord b => (a -> b) -> [a] -> [a]-sortOn' f = sortBy (\x y -> compare (f x) (f y))-#endif+import           Control.Monad+import           Data.Graph.Libgraph      as G+import           Data.List                as List (group, nub, sort)+import qualified Data.Map.Strict          as Map+import           Data.Maybe+import qualified Data.Set                 as Set+import           Debug.Hoed.Compat+import           Debug.Hoed.CompTree+import           Debug.Hoed.Observe+import           Debug.Hoed.Prop+import           Debug.Hoed.ReadLine+import           Debug.Hoed.Render+import           Text.PrettyPrint.FPretty+import           Text.Regex.TDFA+import           Prelude                  hiding (Right) +{-# ANN module ("HLint: ignore Use camelCase" :: String) #-}  debugSession :: Trace -> CompTree -> [Propositions] -> IO () debugSession trace tree ps =-  case filter (not . isRootVertex) $ vs of +  case filter (not . isRootVertex) vs of     []    -> putStrLn $ "No functions annotated with 'observe' expressions"-                        ++ "or annotated functions not evaluated"+                        ++ " or annotated functions not evaluated"     (v:_) -> do noBuffering                 mainLoop v trace tree ps   where   (Graph _ vs _) = tree  --------------------------------------------------------------------------------+-- Execution loop++type Frame state = state -> IO (Transition state)++data Transition state+  = Down (Frame state)+  | Up   (Maybe state)+  | Next state+  | Same++executionLoop :: [Frame state] -> state -> IO ()+executionLoop [] _ = return ()+executionLoop stack@(runFrame : parents) state = do+  transition <- runFrame state+  case transition of+    Same         -> executionLoop stack state+    Next st      -> executionLoop stack st+    Up Nothing   -> executionLoop parents state+    Up (Just st) -> executionLoop parents st+    Down loop    -> executionLoop (loop : stack) state++--------------------------------------------------------------------------------+-- Commands++type Args = [String]++data Command state = Command+  { name        :: String+  , argsDesc    :: [String]+  , commandDesc :: Doc+  , parse       :: Args -> Maybe (state -> IO (Transition state))+  }++interactiveFrame :: String -> [Command state] -> Frame state+interactiveFrame prompt commands state = do+  input <- readLine (prompt ++ " ") (map name commands)+  let run = fromMaybe (\_ -> Same <$ showHelp commands) $ selectCommand input+  run state+  where+    selectCommand = selectFrom commands++showHelp :: [Command state] -> IO ()+showHelp commands =+  putStrLn (pretty 80 $ vcat $ zipWith compose commandsBlock descriptionsBlock)+  where+    compose c d = text (pad c) <+> align d+    commandsBlock = [unwords (name : argsDesc) | Command {..} <- commands]+    descriptionsBlock = map commandDesc commands+    colWidth = maximum $ map length commandsBlock+    pad x = take (colWidth + 1) $ x ++ spaces+    spaces = repeat ' '++helpCommand :: [Command state1] -> Command state2+helpCommand commands =+  Command "help" [] "Shows this help screen." $ \case+    [] -> Just $ \_ -> Same <$ showHelp commands+    _  -> Nothing++selectFrom :: [Command state] -> String -> Maybe (state -> IO (Transition state))+selectFrom commands =+  \case+    "" -> Nothing+    xx -> do+      let (h:t) = words xx+      c <- Map.lookup h commandsMap+      parse c t+  where+    commandsMap = Map.fromList [(name c, c) | c <- commands]+++-------------------------------------------------------------------------------- -- main menu +data State = State+  { cv       :: Vertex+  , trace    :: Trace+  , compTree :: CompTree+  , ps       :: [Propositions]+  }++adbCommand, observeCommand, listCommand, exitCommand :: Command State+adbCommand =+  Command "adb" [] "Start algorithmic debugging." $ \case+    [] -> Just $ \_ -> return $ Down adbFrame+    _  -> Nothing++observeCommand =+  Command+    "observe"+    ["[regexp]"]+    ("Print computation statements that match the regular expression." </>+     "Omitting the expression prints all the statements.") $ \case+    args -> Just $ \State {..} ->+      let regexp = case args of [] -> ".*" ; _ -> unwords args+      in Same <$ printStmts compTree regexp++listCommand =+  Command "list" [] "List all the observables collected." $+    \args -> Just $ \State{..} ->+      let regexp = makeRegex $ case args of [] -> ".*" ; _ -> unwords args+      in Same <$ listStmts compTree regexp++exitCommand =+  Command "exit" [] "Leave the debugging session." $ \case+    [] -> Just $ \_ -> return (Up Nothing)+    _  -> Nothing++mainLoopCommands :: [Command State]+mainLoopCommands =+  sortOn name+    [ adbCommand+    , listCommand+    , observeCommand+    , exitCommand+    , helpCommand mainLoopCommands+    ]+ mainLoop :: Vertex -> Trace -> CompTree -> [Propositions] -> IO ()-mainLoop cv trace compTree ps = do-  i <- readLine "hdb> " ["adb", "observe", "help"]-  case words i of-    ["adb"]             -> adb cv trace compTree ps-    ["observe", regexp] -> do printStmts compTree regexp; loop-    ["observe"]         -> do printStmts compTree ""; loop-    ["exit"]            -> return ()-    _                   -> do help; loop+mainLoop cv trace compTree ps =+  executionLoop [interactiveFrame "hdb>" mainLoopCommands] $+  State cv trace compTree ps++--------------------------------------------------------------------------------+-- list++listStmts :: CompTree -> Regex -> IO ()+listStmts g regex =+  putStrLn $+  unlines $+  snub $+  map (stmtLabel . vertexStmt . G.root) $+  selectVertices (\v -> matchLabel v && isRelevantToUser g v) g   where-  loop = mainLoop cv trace compTree ps+    matchLabel RootVertex = False+    matchLabel v          = match regex (stmtLabel $ vertexStmt v)+    snub = map head . List.group . sort -help :: IO ()-help = putStr-  $  "help              Print this help message.\n"-  ++ "observe [regexp]  Print computation statements that match the regular\n"-  ++ "                  expression. Omitting the expression prints all statements.\n"-  ++ "adb               Start algorithmic debugging.\n"-  ++ "exit              leave debugging session\n"+-- Restricted to statements for lambda functions or top level constants.+-- Discards nested constant bindings+isRelevantToUser :: Graph Vertex arc -> Vertex -> Bool+isRelevantToUser _ Vertex {vertexStmt = CompStmt {stmtDetails = StmtLam {}}} =+    True+isRelevantToUser g v@Vertex {vertexStmt = CompStmt {stmtDetails = StmtCon {}}} =+    RootVertex `elem` preds g v+isRelevantToUser _ RootVertex = False +-- | Returns the vertices satisfying the predicate. Doesn't alter the graph.+selectVertices :: (Vertex->Bool) -> CompTree -> [CompTree]+selectVertices pred g = [ g{G.root = v} | v <- vertices g, pred v]++matchRegex :: Regex -> Vertex -> Bool+matchRegex regex v = match regex $ noNewlines (vertexRes v)++subGraphFromRoot :: Ord v => Graph v a -> Graph v a+subGraphFromRoot g = subGraphFrom (G.root g) g++subGraphFrom :: Ord v => v -> Graph v a -> Graph v a+subGraphFrom v g = Graph {root = v, vertices = filteredV, arcs = filteredA}+  where+    filteredV = getPreorder $ getDfs g {G.root = v}+    filteredSet = Set.fromList filteredV+    filteredA =+      [ a+      | a <- arcs g+      , Set.member (source a) filteredSet && Set.member (target a) filteredSet+      ]+ -------------------------------------------------------------------------------- -- observe- printStmts :: CompTree -> String -> IO ()-printStmts (Graph _ vs _) regexp = do-  rComp <- Regex.compile defaultCompOpt defaultExecOpt regexp-  case rComp of Prelude.Left  (_, errorMessage) -> printL errorMessage-                Prelude.Right _                 -> printR+printStmts g regexp+    | null vs_filtered  =+      putStrLn $ "There are no computation statements matching \"" ++ regexp ++ "\"."+    | otherwise = forM_ (zip [0..] $ nubOrd $ map printStmt vs_filtered) $ \(n,s) -> do+    putStrLn $ "--- stmt-" ++ show n ++ " ------------------------------------------"+    putStrLn s   where-  printL errorMessage = putStrLn errorMessage-  printR-    | vs_filtered == []  = printL $ "There are no computation statements matching \"" ++ regexp ++ "\"."-    | otherwise          = printStmts' vs_filtered-  vs_filtered-    | regexp == "" = vs_sorted-    | otherwise    = filter (\v -> (noNewlines . vertexRes $ v) =~ regexp) vs_sorted-  vs_sorted = sortOn (vertexRes) . filter (not . isRootVertex) $ vs+  vs_filtered =+    map subGraphFromRoot .+    sortOn (vertexRes . G.root) .+    selectVertices (\v -> matchRegex r v && isRelevantToUser g v) $+    g+  r = makeRegex regexp+  nubOrd = nub -- We want nubOrd from the extra package -printStmts' :: [Vertex] -> IO ()-printStmts' vs = do-  mapM_ print (zip [1..] vs)-  putStrLn "--------------------------------------------------------------------"+printStmt :: CompTree -> String+printStmt g = unlines $+    show(vertexStmt $ G.root g) :+    concat+      [ "  where" :+        map ("    " ++) locals+      | not (null locals)]   where-  print (n,v) = do -    putStrLn $ "--- stmt-" ++ show n ++ " ------------------------------------------"-    (putStrLn . show . vertexStmt) v+    locals =+          -- constants+          [ stmtRes c+          | Vertex {vertexStmt = c@CompStmt {stmtDetails = StmtCon{}}} <-+              succs g (G.root g)+          ] +++          -- function calls+          [ stmtRes c+          | Vertex {vertexStmt = c@CompStmt {stmtDetails = StmtLam{}}} <-+              succs g (G.root g)+          ]  -------------------------------------------------------------------------------- -- algorithmic debugging -adb :: Vertex -> Trace -> CompTree -> [Propositions] -> IO ()-adb cv trace compTree ps = do-  adb_stats compTree-  print $ vertexStmt cv-  case lookupPropositions ps cv of -    Nothing     -> adb_interactive cv trace compTree ps-    (Just prop) -> do-      judgement <- judge trace prop cv unjudgedCharacterCount compTree-      case judgement of-        (Judge Right)                    -> adb_judge cv Right trace compTree ps-        (Judge Wrong)                    -> adb_judge cv Wrong trace compTree ps-        (Judge (Assisted msgs))          -> adb_advice msgs cv trace compTree ps-        (AlternativeTree newCompTree newTrace) -> do-           putStrLn "Discovered simpler tree!"-           let cv' = next RootVertex newCompTree-           adb cv' newTrace newCompTree ps+adbCommands :: [Command State]+adbCommands = [judgeCommand Right, judgeCommand Wrong] -adb_advice msgs cv trace compTree ps = do-  mapM_ putStrLn (map toString msgs)-  adb_interactive cv trace compTree ps-    where +judgeCommand :: Judgement -> Command State+judgeCommand judgement =+  Command+    verbatim+    []+    ("Judge computation statements" </>+     text verbatim </>+     " according to the intended behaviour/specification of the function.") $ \case+    [] -> Just $ \st -> adb_judge judgement st+    _  -> Nothing+  where+    verbatim | Right <- judgement = "right"+             | Wrong <- judgement = "wrong"++adbFrame :: State -> IO (Transition State)+adbFrame st@State{..} =+  case cv of+    RootVertex -> do+      putStrLn "Out of vertexes"+      return $ Up Nothing+    _ -> do+      adb_stats compTree+      print $ vertexStmt cv+      case lookupPropositions ps cv of+        Nothing   -> interactive st+        Just prop -> do+          judgement <- judge trace prop cv unjudgedCharacterCount compTree+          case judgement of+            (Judge Right)                    -> adb_judge Right st+            (Judge Wrong)                    -> adb_judge Wrong st+            (Judge (Assisted msgs))          -> do+              mapM_ (putStrLn . toString) msgs+              interactive st+            (AlternativeTree newCompTree newTrace) -> do+              putStrLn "Discovered simpler tree!"+              let cv' = next RootVertex newCompTree+              return $ Next $ State cv' newTrace newCompTree ps+  where+    interactive = interactiveFrame "?" adbCommands     toString (InconclusiveProperty s) = "inconclusive property: " ++ s     toString (PassingProperty s)      = "passing property: "      ++ s -adb_interactive cv trace compTree ps = do-  i <- readLine "? " ["right", "wrong", "prop", "exit"]-  case i of-    "right" -> adb_judge cv Right trace compTree ps-    "wrong" -> adb_judge cv Wrong trace compTree ps-    "exit"  -> mainLoop cv trace compTree ps-    _       -> do adb_help-                  adb cv trace compTree ps----adb_help :: IO ()-adb_help = putStr-  $  "help              Print this help message.\n"-  ++ "right             Judge computation statements right according to the\n"-  ++ "                  intentioned behaviour/specification of the function\n"-  ++ "wrong             Judge computation statements wrong according to the\n"-  ++ "                  intentioned behaviour/specification of the function\n"-  ++ "exit              Return to main menu\n"- adb_stats :: CompTree -> IO () adb_stats compTree = putStrLn-  $  "======================================================================= [" +  $  "======================================================================= ["   ++ show (length vs_w) ++ "-" ++ show (length vs_r) ++ "/" ++ show (length vs) ++ "]"   where   vs   = filter (not . isRootVertex) (vertices compTree)   vs_r = filter isRight vs   vs_w = filter isWrong vs --adb_judge :: Vertex -> Judgement -> Trace -> CompTree -> [Propositions] -> IO ()-adb_judge cv jmt trace compTree ps = case faultyVertices compTree' of+adb_judge :: Judgement -> State -> IO (Transition State)+adb_judge jmt State{..} = case faultyVertices compTree' of   (v:_) -> do adb_stats compTree'               putStrLn $ "Fault located! In:\n" ++ vertexRes v-              mainLoop cv trace compTree' ps-  []    -> adb cv_next trace compTree' ps+              return $ Up $ Just $ State cv trace compTree' ps+  []    -> return $ Next $ State cv_next trace compTree' ps   where   cv_next     = next cv' compTree'   compTree'   = mapGraph replaceCV compTree@@ -173,8 +326,12 @@  unjudged :: Vertex -> Bool unjudged = unjudged' . getJudgement-  where +  where   unjudged' Right = False   unjudged' Wrong = False   unjudged' _     = True++++ 
+ Debug/Hoed/Fields.hs view
@@ -0,0 +1,29 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE KindSignatures #-}+module Debug.Hoed.Fields where++import GHC.Generics+import GHC.Exts++#if __GLASGOW_HASKELL__ > 710+import GHC.TypeLits (ErrorMessage(..), TypeError)+#endif++data Nat = Z | S Nat++-- A constraint on the number of the constructors in a datatype+type family FieldLimit (n :: Nat) a :: Constraint where+  FieldLimit n (M1 c meta f) = FieldLimit n f+  FieldLimit n (f :+: g)     = (FieldLimit n f, FieldLimit n g)+  FieldLimit ('S n) (f :*: g) = FieldLimit n g+  FieldLimit n U1 = ()+  FieldLimit n V1 = ()+  FieldLimit n (K1 a b) = ()+#if __GLASGOW_HASKELL__ > 710+  FieldLimit n (URec a) = ()+  FieldLimit 'Z f = TypeError ('Text "Hoed only handles constructors with 64 fields or less")+#endif
Debug/Hoed/Observe.lhs view
@@ -1,4 +1,7 @@ \begin{code}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DataKinds #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE DeriveGeneric #-}@@ -6,6 +9,7 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE KindSignatures #-}+{-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE CPP #-}  \end{code}@@ -86,31 +90,20 @@ \begin{code} import Prelude hiding (Right) import qualified Prelude-import System.IO-import Data.Maybe import Control.Monad import Data.Array as Array-import Data.List-import Data.Char-import System.Environment+import Debug.Hoed.Fields  import GHC.Generics  import Data.IORef import System.IO.Unsafe -import Control.Concurrent(takeMVar,putMVar,MVar,newMVar)-import qualified Control.Concurrent as Concurrent \end{code} -For the TracedMonad instance of IO: \begin{code}-import GHC.Base hiding (mapM, Type)-\end{code}--\begin{code} import qualified Control.Exception as Exception-import Control.Exception (Exception, throw, ErrorCall(..), SomeException(..))+import Control.Exception (throw, SomeException(..)) {-  ( catch                 , Exception(..)@@ -155,14 +148,6 @@ \end{code}  -\begin{code}-#if __GLASGOW_HASKELL__ >= 710-instance {-# OVERLAPPABLE #-} Observable a where -  observer = observeOpaque "<?>"-  constrain _ _ = error "contrained by untraced value"-#endif-\end{code}- A type generic definition of constrain  \begin{code}@@ -189,7 +174,8 @@ \begin{code}  -- Meta: data types-instance (GObservable a) => GObservable (M1 D d a) where+-- FieldLimit requires undecidable instances+instance (FieldLimit ('S ('S ('S ('S ('S ('S 'Z)))))) a, GObservable a) => GObservable (M1 D d a) where  gdmobserver m@(M1 x) cxt = M1 (gdmobserver x cxt)  gdmObserveArgs = gthunk  gdmShallowShow = error "gdmShallowShow not defined on the <<data meta type>>"@@ -422,15 +408,6 @@                                 })                  , port+1 ) -nothunk :: a -> ObserverM a-nothunk a = ObserverM $ \ parent port ->-                ( observer__ a (Parent-                                { parentUID = parent-                                , parentPosition   = port-                                }) -                , port+1 )-- (<<) :: (Observable a) => ObserverM (a -> b) -> a -> ObserverM b -- fn << a = do { fn' <- fn ; a' <- thunk a ; return (fn' a') } fn << a = gdMapM (thunk observer) fn a@@ -515,10 +492,6 @@ gdmobserver_ :: (GObservable f) => f a -> Parent -> f a gdmobserver_ a context = gsendEnterPacket a context -{-# NOINLINE observer__ #-}-observer__ :: a -> Parent -> a-observer__ a context = sendNoEnterPacket a context- \end{code}  The functions that output the data. All are dirty.@@ -534,7 +507,7 @@ \begin{code} generateContext :: (a->Parent->a) -> String -> a -> (a,Int) generateContext f {- tti -} label orig = unsafeWithUniq $ \node ->-     do sendEvent node (Parent 0 0) (Observe label node)+     do sendEvent node (Parent 0 0) (Observe label)         return (observer_ f orig (Parent                       { parentUID      = node                       , parentPosition = 0@@ -562,13 +535,6 @@                         (handleExc context)         } -sendNoEnterPacket :: a -> Parent -> a-sendNoEnterPacket r context = unsafeWithUniq $ \ node ->-     do { sendEvent node context NoEnter-        ; ourCatchAllIO (evaluate r)-                        (handleExc context)-        }- evaluate :: a -> IO a evaluate a = a `seq` return a @@ -601,10 +567,9 @@         deriving (Eq,Generic)  data Change-        = Observe       !String        !Int+        = Observe       !String         | Cons    !Int  !String         | Enter-        | NoEnter         | Fun         deriving (Eq, Show,Generic) @@ -638,13 +603,8 @@  sendEvent :: Int -> Parent -> Change -> IO () sendEvent nodeId parent change =-        do { nodeId `seq` parent `seq` return ()-           ; change `seq` return ()-           ; takeMVar sendSem-           ; es <- readIORef events-           ; let event = Event nodeId parent change-           ; writeIORef events (event `seq` (event : es))-           ; putMVar sendSem ()+        do { let !event = Event nodeId parent change+           ; atomicModifyIORef' events (\es -> (event : es, ()))            }  -- local@@ -654,11 +614,6 @@ badEvents :: Trace badEvents = error "Bad Event Stream" --- use as a trivial semiphore-{-# NOINLINE sendSem #-}-sendSem :: MVar ()-sendSem = unsafePerformIO $ newMVar ()--- end local \end{code}  @@ -677,13 +632,7 @@ initUniq = writeIORef uniq 1  getUniq :: IO UID-getUniq-    = do { takeMVar uniqSem-         ; n <- readIORef uniq-         ; writeIORef uniq $! (n + 1)-         ; putMVar uniqSem ()-         ; return n-         }+getUniq = atomicModifyIORef' uniq (\n -> (n+1,n))  peepUniq :: IO UID peepUniq = readIORef uniq@@ -693,9 +642,6 @@ uniq :: IORef UID uniq = unsafePerformIO $ newIORef 1 -{-# NOINLINE uniqSem #-}-uniqSem :: MVar ()-uniqSem = unsafePerformIO $ newMVar () \end{code}  
Debug/Hoed/Render.hs view
@@ -1,40 +1,36 @@+{-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE ImplicitParams    #-}+{-# LANGUAGE OverloadedStrings #-}+{-# OPTIONS_GHC -fno-warn-name-shadowing #-} -- This file is part of the Haskell debugger Hoed. -- -- Copyright (c) Maarten Faddegon, 2014-{-# LANGUAGE CPP, DeriveGeneric #-}+{-# LANGUAGE DeriveGeneric     #-}  module Debug.Hoed.Render (CompStmt(..)+,StmtDetails(..)+,stmtRes ,renderCompStmts ,CDS ,eventsToCDS-,rmEntrySet-,simplifyCDSSet ,noNewlines+,sortOn ) where-import Debug.Hoed.EventForest+import           Control.DeepSeq+import           Data.Array               as Array+import           Data.Char                (isAlpha)+import           Data.List                (nub, sort)+import           Data.Strict.Tuple+import           Debug.Hoed.Compat+import           Debug.Hoed.Observe+import           GHC.Generics+import           Prelude                  hiding (lookup)+import           Text.PrettyPrint.FPretty hiding (sep, (<$>))+import           Text.Read -import Text.PrettyPrint.FPretty hiding (sep)-import Prelude hiding(lookup)-import Debug.Hoed.Observe-import Data.List(sort,sortBy,partition,nub-#if __GLASGOW_HASKELL__ >= 710-                , sortOn-#endif-                )-import Data.Graph.Libgraph-import Data.Array as Array-import Data.Char(isAlpha)-import GHC.Generics -#if __GLASGOW_HASKELL__ < 710-sortOn :: Ord b => (a -> b) -> [a] -> [a]-sortOn f  = map snd . sortOn' fst .  map (\x -> (f x, x))--sortOn' :: Ord b => (a -> b) -> [a] -> [a]-sortOn' f = sortBy (\x y -> compare (f x) (f y))-#endif- ------------------------------------------------------------------------ -- The CompStmt type @@ -45,61 +41,84 @@ -- event that starts the observation. And stmtUIDs is the list of -- UIDs of all events that form the statement. -data CompStmt = CompStmt { stmtLabel      :: String-                         , stmtIdentifier :: UID-                         , stmtRes        :: String+data CompStmt = CompStmt { stmtLabel      :: !String+                         , stmtIdentifier :: !UID+                         , stmtDetails    :: !StmtDetails                          }-                deriving (Eq,Ord,Generic)+                deriving (Generic) +instance NFData CompStmt++instance Eq CompStmt where c1 == c2 = stmtIdentifier c1 == stmtIdentifier c2+instance Ord CompStmt where+  compare c1 c2 = compare (stmtIdentifier c1) (stmtIdentifier c2)++data StmtDetails+  = StmtCon { stmtCon :: !String+           ,  stmtPretty :: !String}+  | StmtLam { stmtLamArgs :: ![String]+           ,  stmtLamRes :: !String+           ,  stmtPretty :: !String}+  deriving (Generic)++instance NFData StmtDetails++stmtRes :: CompStmt -> String+stmtRes = stmtPretty . stmtDetails+ instance Show CompStmt where   show = stmtRes   showList eqs eq = unlines (map show eqs) ++ eq  noNewlines :: String -> String noNewlines = noNewlines' False+noNewlines' :: Bool -> String -> String noNewlines' _ [] = [] noNewlines' w (s:ss)  | w       && (s == ' ' || s == '\n') =       noNewlines' True ss- | (not w) && (s == ' ' || s == '\n') = ' ' : noNewlines' True ss+ | not w && (s == ' ' || s == '\n') = ' ' : noNewlines' True ss  | otherwise                          = s   : noNewlines' False ss  ------------------------------------------------------------------------ -- Render equations from CDS set -statementWidth = 110 -- 110 is good for papers (maybe make this configurable from the GUI?)--renderCompStmts :: CDSSet -> [CompStmt]-renderCompStmts = foldl (\acc set -> acc ++ renderCompStmt set) []+renderCompStmts :: (?statementWidth::Int) => CDSSet -> [CompStmt]+renderCompStmts = concatMap renderCompStmt  -- renderCompStmt: an observed function can be applied multiple times, each application -- is rendered to a computation statement -renderCompStmt :: CDS -> [CompStmt]-renderCompStmt (CDSNamed name uid set)-  = map mkStmt statements-  where statements :: [(String,UID)]-        statements   = map (\(d,i) -> (pretty statementWidth d,i)) doc-        doc          = foldl (\a b -> a ++ renderNamedTop name uid b) [] output+renderCompStmt :: (?statementWidth::Int) => CDS -> [CompStmt]+renderCompStmt (CDSNamed name uid set) = statements+  where statements :: [CompStmt]+        statements   = concatMap (renderNamedTop name uid) output         output       = cdssToOutput set -        mkStmt :: (String,UID) -> CompStmt-        mkStmt (s,i) = CompStmt name i s--renderNamedTop :: String -> UID -> Output -> [(Doc,UID)]-renderNamedTop name observeUid(OutData cds)-  =  map f pairs-  where f (args,res,Just i) = (renderNamedFn name (args,res), i)-        f (_,cons,Nothing)  = (renderNamedCons name cons, observeUid)-        pairs  = (nubSorted . sortOn argAndRes) pairs'-        pairs' = findFn [cds]-        argAndRes (arg,res,_) = (arg,res)+renderCompStmt other = error $ show other +renderNamedTop :: (?statementWidth::Int) => String -> UID -> Output -> [CompStmt]+renderNamedTop name observeUid (OutData cds) = map f pairs+  where+    f (args, res, Just i) =+      CompStmt name i $+      StmtLam+        (map (prettyW . renderSet) args)+        (prettyW $ renderSet res)+        (prettyW $ renderNamedFn name (args, res))+    f (_, cons, Nothing) =+      CompStmt name observeUid $+      StmtCon (prettyW $ renderSet cons)+              (prettyW $ renderNamedCons name cons)+    pairs = (nubSorted . sortOn argAndRes) pairs'+    pairs' = findFn [cds]+    argAndRes (arg, res, _) = (arg, res)+renderNamedTop name _ other = error $ show other  -- local nub for sorted lists nubSorted :: Eq a => [a] -> [a]-nubSorted []                  = []-nubSorted (a:a':as) | a == a' = nub (a' : as)-nubSorted (a:as)              = a : nub as+nubSorted []        = []+nubSorted (a:a':as) | a == a' = nubSorted (a' : as)+nubSorted (a:as)    = a : nubSorted as  -- %************************************************************************ -- %*                                                                   *@@ -107,28 +126,36 @@ -- %*                                                                   * -- %************************************************************************ +data CDS = CDSNamed      !String !UID !CDSSet+         | CDSCons       !UID    !String   ![CDSSet]+         | CDSFun        !UID              !CDSSet !CDSSet+         | CDSEntered    !UID+         | CDSTerminated !UID+         | CDSString     !String -- only used internally in eventsToCDS+        deriving (Show,Eq,Ord,Generic) -data CDS = CDSNamed      String UID CDSSet-         | CDSCons       UID    String   [CDSSet]-         | CDSFun        UID             CDSSet CDSSet-         | CDSEntered    UID-         | CDSTerminated UID-        deriving (Show,Eq,Ord)+instance NFData CDS +normalizeCDS :: CDS -> CDS+normalizeCDS (CDSString s) = CDSCons 0 (show s) []+normalizeCDS other = other type CDSSet = [CDS]  eventsToCDS :: [Event] -> CDSSet-eventsToCDS pairs = getChild 0 0+eventsToCDS pairs = force $ getChild 0 0    where -     res i = (!) out_arr i+     res = (!) out_arr       bnds = (0, length pairs) -     mid_arr :: Array Int [(Int,CDS)]-     mid_arr = accumArray (flip (:)) [] bnds-                [ (pnode,(pport,res node))-                | (Event node (Parent pnode pport) _) <- pairs+     cons !t !h = h : t++     mid_arr :: Array Int [Pair Int CDS]+     mid_arr = accumArray cons [] bnds+                [ (pnode, (pport :!: res node))+                | (Event node (Parent pnode pport) change) <- pairs+                , change /= Enter                 ]       out_arr = array bnds       -- never uses 0 index@@ -137,56 +164,71 @@                 ]       getNode'' ::  Int -> Event -> Change -> CDS-     getNode'' node e change =+     getNode'' node _e change =        case change of-        (Observe str i) -> let chd = getChild node 0-                               in CDSNamed str (getId chd i) chd-        (Enter)             -> CDSEntered node-        (NoEnter)           -> CDSTerminated node-        Fun                 -> CDSFun node (getChild node 0) (getChild node 1)+        Observe str         -> let chd = normalizeCDS <$> getChild node 0+                               in CDSNamed str (getId chd node) chd+        Enter               -> CDSEntered node+        Fun                 -> CDSFun node (normalizeCDS <$> getChild node 0)+                                           (normalizeCDS <$> getChild node 1)         (Cons portc cons)-                            -> CDSCons node cons-                                  [ getChild node n | n <- [0..(portc-1)]]+                            -> simplifyCons node cons+                                 [getChild node n | n <- [0 .. portc - 1]] -     getId []                  i = i-     getId ((CDSFun i _ _ ):_) _ = i-     getId (_:cs)              i = getId cs i+     getId []                 i  = i+     getId (CDSFun i _ _:_) _    = i+     getId (_:cs)             i  = getId cs i       getChild :: Int -> Int -> CDSSet      getChild pnode pport =-        [ content-        | (pport',content) <- (!) mid_arr pnode-        , pport == pport'-        ]+       [ content+       | pport' :!: content <- (!) mid_arr pnode+       , pport == pport'+       ] +simplifyCons :: UID -> String -> [CDSSet] -> CDS+simplifyCons _ "throw" [[CDSCons _ "ErrorCall" set]]+  = CDSCons 0 "error" set+simplifyCons _ ":" [[CDSCons _ (matchChar -> Just !ch) []], [CDSCons _ "[]" []]]+  = CDSString [ch]+simplifyCons _ ":" [[CDSCons _ (matchChar -> Just !ch) []], [CDSString s]]+  = CDSString (ch:s)+simplifyCons uid con xx = CDSCons uid con (map (map normalizeCDS) xx)++matchChar :: [Char] -> Maybe Char+matchChar ['\'', ch ,'\''] = Just ch+matchChar special@['\'', _, _ ,'\''] = readMaybe special+matchChar _ = Nothing+ render  :: Int -> Bool -> CDS -> Doc render prec par (CDSCons _ ":" [cds1,cds2]) =-        if (par && not needParen)+        if par && not needParen         then doc -- dont use paren (..) because we dont want a grp here!         else paren needParen doc    where-        doc = grp (sep <> renderSet' 5 False cds1 <> text " : ") <>+        doc = grp (sep <> renderSet' 5 False cds1 <> " : ") <>               renderSet' 4 True cds2         needParen = prec > 4-render prec par (CDSCons _ "," cdss) | length cdss > 0 =-        nest 2 (text "(" <> foldl1 (\ a b -> a <> text ", " <> b)+render _prec _par (CDSCons _ "," cdss) | not (null cdss) =+        nest 2 ("(" <> foldl1 (\ a b -> a <> ", " <> b)                             (map renderSet cdss) <>-                text ")")-render prec par (CDSCons _ name cdss)-  | (not . isAlpha . head) name && length cdss > 1 = -- render as infix+                ")")+render prec _par (CDSCons _ name cdss)+  | _:_ <- name+  , (not . isAlpha . head) name && length cdss > 1 = -- render as infix         paren (prec /= 0)                   (grp                     (renderSet' 10 False (head cdss)                      <> sep <> text name                      <> nest 2 (foldr (<>) nil-                                 [ if cds == [] then nil else sep <> renderSet' 10 False cds+                                 [ if null cds then nil else sep <> renderSet' 10 False cds                                  | cds <- tail cdss                                  ]                               )                     )                   )   | otherwise = -- render as prefix-        paren (length cdss > 0 && prec /= 0)+        paren (not (null cdss) && prec /= 0)                  ( grp                    (text name <> nest 2 (foldr (<>) nil                                           [ sep <> renderSet' 10 False cds@@ -203,102 +245,65 @@ renderSet = renderSet' 0 False  renderSet' :: Int -> Bool -> CDSSet -> Doc-renderSet' _ _      [] = text "_"-renderSet' prec par [cons@(CDSCons {})]    = render prec par cons-renderSet' prec par cdss                   =-         (text "{ " <> foldl1 (\ a b -> a <> line <>-                                    text ", " <> b)+renderSet' _ _      [] = "_"+renderSet' prec par [cons@CDSCons {}]    = render prec par cons+renderSet' _prec _par cdss                   =+         "{ " <> foldl1 (\ a b -> a <> line <>+                                    ", " <> b)                                     (map renderFn pairs) <>-                line <> text "}")+                line <> "}"     where         findFn_noUIDs :: CDSSet -> [([CDSSet],CDSSet)]         findFn_noUIDs c = map (\(a,r,_) -> (a,r)) (findFn c)         pairs = nub (sort (findFn_noUIDs cdss))         -- local nub for sorted lists-        nub []                  = []+        nub []        = []         nub (a:a':as) | a == a' = nub (a' : as)-        nub (a:as)              = a : nub as+        nub (a:as)    = a : nub as  renderFn :: ([CDSSet],CDSSet) -> Doc renderFn (args, res)         = grp  (nest 3-                (text "\\ " <>+                ("\\ " <>                  foldr (\ a b -> nest 0 (renderSet' 10 False a) <> sp <> b)                        nil                        args <> sep <>-                 text "-> " <> renderSet' 0 False res+                 "-> " <> renderSet res                 )                )  renderNamedCons :: String -> CDSSet -> Doc renderNamedCons name cons   = text name <> nest 2-     ( sep <> linebreak <> grp (text "= " <> renderSet' 0 False cons)+     ( sep <> grp (text "= " <> renderSet cons)      )  renderNamedFn :: String -> ([CDSSet],CDSSet) -> Doc renderNamedFn name (args,res)   = text name <> nest 2-     ( sep <> (foldr (\ a b -> grp (renderSet' 10 False a) <> line <> b) nil args)-       <> linebreak <> grp (text "= " <> renderSet' 0 False res)+     ( sep <> foldr (\ a b -> grp (renderSet' 10 False a) <> sep <> b) nil args+       <> sep <> grp ("= " <> align(renderSet res))      ) +-- | 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. findFn :: CDSSet -> [([CDSSet],CDSSet, Maybe UID)] findFn = foldr findFn' [] +findFn' :: CDS -> [([CDSSet], CDSSet, Maybe UID)] -> [([CDSSet], CDSSet, Maybe UID)] findFn' (CDSFun i arg res) rest =     case findFn res of        [(args',res',_)] -> (arg : args', res', Just i) : rest        _                -> ([arg], res, Just i) : rest findFn' other rest = ([],[other], Nothing) : rest -rmEntry :: CDS -> CDS-rmEntry (CDSNamed str i set) = CDSNamed str i (rmEntrySet set)-rmEntry (CDSCons i str sets) = CDSCons i str (map rmEntrySet sets)-rmEntry (CDSFun i a b)       = CDSFun i (rmEntrySet a) (rmEntrySet b)-rmEntry (CDSTerminated i)    = CDSTerminated i-rmEntry (CDSEntered i)       = error "found bad CDSEntered"--rmEntrySet = map rmEntry . filter noEntered-  where-        noEntered (CDSEntered _) = False-        noEntered _              = True--simplifyCDS :: CDS -> CDS-simplifyCDS (CDSNamed str i set) = CDSNamed str i (simplifyCDSSet set)-simplifyCDS (CDSCons _ "throw"-                  [[CDSCons _ "ErrorCall" set]]-            ) = simplifyCDS (CDSCons 0 "error" set)-simplifyCDS cons@(CDSCons i str sets) =-        case spotString [cons] of-          Just str | not (null str) -> CDSCons 0 (show str) []-          _ -> CDSCons 0 str (map simplifyCDSSet sets)--simplifyCDS (CDSFun i a b) = CDSFun i (simplifyCDSSet a) (simplifyCDSSet b)--simplifyCDS (CDSTerminated i) = (CDSCons i "<?>" [])--simplifyCDSSet = map simplifyCDS--spotString :: CDSSet -> Maybe String-spotString [CDSCons _ ":"-                [[CDSCons _ str []]-                ,rest-                ]-           ]-        = do { ch <- case reads str of-                       [(ch,"")] -> return ch-                       _ -> Nothing-             ; more <- spotString rest-             ; return (ch : more)-             }-spotString [CDSCons _ "[]" []] = return []-spotString other = Nothing- paren :: Bool -> Doc -> Doc-paren False doc = grp ( doc)-paren True  doc = grp ( (text "(" <> doc <> text ")"))+paren False doc = grp doc+paren True  doc = grp ( "(" <> doc <> ")")  data Output = OutLabel String CDSSet [Output]             | OutData  CDS@@ -307,18 +312,24 @@ cdssToOutput :: CDSSet -> [Output] cdssToOutput =  map cdsToOutput +cdsToOutput :: CDS -> Output cdsToOutput (CDSNamed name _ cdsset)             = OutLabel name res1 res2   where       res1 = [ cdss | (OutData cdss) <- res ]-      res2 = [ out  | out@(OutLabel {}) <- res ]+      res2 = [ out  | out@OutLabel {} <- res ]       res  = cdssToOutput cdsset-cdsToOutput cons@(CDSCons {}) = OutData cons-cdsToOutput    fn@(CDSFun {}) = OutData fn+cdsToOutput cons@CDSCons {} = OutData cons+cdsToOutput    fn@CDSFun {} = OutData fn +nil :: Doc nil = Text.PrettyPrint.FPretty.empty+grp :: Doc -> Doc grp = Text.PrettyPrint.FPretty.group-brk = softbreak -- Nothing, if the following still fits on the current line, otherwise newline. -sep = softline  -- A space, if the following still fits on the current line, otherwise newline. +sep :: Doc+sep = softline  -- A space, if the following still fits on the current line, otherwise newline. sp :: Doc-sp = text " "   -- A space, always.+sp = " "   -- A space, always.++prettyW :: (?statementWidth::Int) => Doc -> String+prettyW = pretty ?statementWidth
Debug/Hoed/Serialize.hs view
@@ -15,9 +15,8 @@ import Prelude hiding (lookup,Right) import qualified Prelude as Prelude import Debug.Hoed.CompTree-import Debug.Hoed.Render(CompStmt(..))+import Debug.Hoed.Render(CompStmt(..), StmtDetails(..)) import Data.Serialize-import Data.ByteString (ByteString) import qualified Data.ByteString as BS import GHC.Generics import Data.Graph.Libgraph(Judgement(..),AssistedMessage(..),mapGraph,Graph(..),Arc(..))@@ -25,12 +24,14 @@ -------------------------------------------------------------------------------- -- Derive Serialize instances +-- Orphan instances instance (Serialize a, Serialize b) => Serialize (Graph a b) instance (Serialize a, Serialize b) => Serialize (Arc a b) instance Serialize Vertex instance Serialize Judgement instance Serialize AssistedMessage instance Serialize CompStmt+instance Serialize StmtDetails instance Serialize Parent instance Serialize Event instance Serialize Change
+ Debug/Hoed/Span.hs view
@@ -0,0 +1,199 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE MultiWayIf            #-}+{-# LANGUAGE OverloadedLists       #-}+{-# LANGUAGE ViewPatterns #-}+module Debug.Hoed.Span+  ( Span(..)+  , getSpanUID+  , SpanZipper+  , startSpan+  , stopSpan+  , pauseSpan+  , resumeSpan+  , runSpanTests+  ) where++import           Control.Exception as E+import           Debug.Hoed.Observe++import           Data.List              (foldl', unfoldr)+import           Data.Maybe+import           GHC.Exts               (IsList (..))++import Debug.Trace+import Test.QuickCheck+import Test.QuickCheck.All++data Span = Computing !UID | Paused !UID deriving (Eq, Ord)++instance Show Span where+  show (Computing i) = show i+  show (Paused i)    = "(" ++ show i ++ ")"++getSpanUID :: Span -> UID+getSpanUID (Computing j) = j+getSpanUID (Paused j)    = j++-- | A list of computation spans.+--   Negative UIDs denote paused spans.+data SpanList = SpanCons !UID !SpanList | SpanNil+  deriving Eq++-- | A bijection between SpanList and [Span]+instance IsList SpanList where+  type Item SpanList = Span+  toList = unfoldr f where+    f SpanNil = Nothing+    f (SpanCons uid rest)+      | uid > 0   = Just (Computing uid, rest)+      | otherwise = Just (Paused (negate uid), rest)+  fromList = foldr f SpanNil where+    f (Paused uid) = SpanCons (negate uid)+    f (Computing uid) = SpanCons uid++instance Show SpanList where show = show . toList++-- | The zipper of span lists+data SpanZipper+  = SZ { left :: !SpanList   -- ^ A snoc list with the spans to the left of the cursor+      ,  cursorUID :: !UID+      ,  right :: !SpanList  -- ^ A cons list with the spans to the right of the cursor+      }+  | SZNil+  deriving Eq++cursor sz+  | cursorUID sz > 0 = Computing (cursorUID sz)+  | otherwise = Paused $ negate (cursorUID sz)++-- | A forgetful mapping between SpanZipper and [Span]+instance IsList SpanZipper where+  type Item SpanZipper = Span+  toList SZNil = []+  toList (SZ l uid r) = reverse(toList l) ++ toList (SpanCons uid r)++  fromList [] = SZNil+  fromList (Paused x : xx) = SZ [] (negate x) (fromList xx)+  fromList (Computing x : xx) = SZ [] x (fromList xx)++newtype Verbatim = Verbatim String+instance Show Verbatim where show (Verbatim s) = s++instance Show SpanZipper where+  show SZNil = "[]"+  show sz@SZ {..} =+    show $+    map (Verbatim . show) (toList left) +++    Verbatim ('\ESC' : "[4m" ++ show (cursor sz) ++ '\ESC' : "[24m") :+    map (Verbatim . show) (toList right)++moveLeft, moveRight :: SpanZipper -> Maybe SpanZipper+moveLeft SZNil = Nothing+moveLeft SZ{left = SpanNil} = Nothing+moveLeft SZ{left = SpanCons uid l, ..} = Just $ SZ l uid (SpanCons cursorUID right)++moveRight SZNil = Nothing+moveRight SZ{right = SpanNil} = Nothing+moveRight SZ{right = SpanCons uid r, ..} = Just $ SZ (SpanCons cursorUID left) uid r++startSpan :: UID -> SpanZipper -> SpanZipper+startSpan uid SZNil = SZ [] uid []+startSpan uid SZ{..}  = SZ [] uid (left <> SpanCons cursorUID right)+  where+    SpanNil           <> x = x+    SpanCons uid rest <> x = rest <> SpanCons uid x++-- pauseSpan always moves to the right, except when at the bottom of the stack in which case it restarts from the top+pauseSpan :: UID -> SpanZipper -> SpanZipper+pauseSpan uid initial+  | SZNil <- initial = initial+  | x == uid = initial {cursorUID = negate uid}+  | SpanNil <- right initial+  , SpanCons a aa <-+    fromListWithReverse $ toList (SpanCons x (left initial)) -- this should fuse!+   = go (SZ [] a aa)+  | otherwise = go initial+  where+    x = cursorUID initial+    negative x =+      if x < 0+        then x+        else negate x+    fromListWithReverse = foldl f SpanNil+      where+        f rest (Paused uid) = SpanCons (negate uid) rest+        f rest (Computing uid) = SpanCons uid rest+    notLeft =+      (Computing uid `notElem` toList (left initial)) ||+      error (unwords ["pauseSpan", show uid, show initial])+    go sz+      | cursorUID sz == uid = sz {cursorUID = negate uid}+      | Just sz' <- moveRight sz {cursorUID = negative (cursorUID sz)} = go sz'+      | otherwise = assert notLeft initial++-- resumeSpan moves to the left, except when at the Top of the stack in which case it goes right+resumeSpan :: UID -> SpanZipper -> SpanZipper+resumeSpan (negate -> uid) sz+  | SZNil <- sz = sz+  | cursorUID sz == uid = sz{cursorUID = negate uid}+  | SpanNil <- left sz, Just sz' <- moveRight sz = go moveRight sz'+  | Just sz' <- moveLeft sz = go moveLeft sz'+  | otherwise = assert (Computing uid `notElem` toList (right sz)) sz+  where+    go move sz+      | cursorUID sz == uid = sz{cursorUID = negate uid}+      | Just sz' <- move sz = go move sz'+      | otherwise = sz++-- stopSpan moves left+stopSpan :: UID -> SpanZipper -> SpanZipper+stopSpan uid sz@SZ{..}+  | uid == abs cursorUID = if+      | Just sz' <- moveRight sz -> sz'{left = left}+      | Just sz' <- moveLeft  sz -> sz'{right = right}+      | otherwise -> SZNil+  | Just sz' <- moveLeft sz = stopSpan uid sz'+stopSpan uid sz = assert (uid `notElem` map getSpanUID (toList (right sz))) sz+++---------------------------------------------------------+-- Properties+instance Arbitrary Span where+  arbitrary = do+    computing <- arbitrary+    uid <- arbitrary+    return $ if computing then Computing (abs uid + 1) else Paused (abs uid + 1)++instance Arbitrary SpanList where+  arbitrary = fromList <$> arbitrary+  shrink [] = []+  shrink (SpanCons a rest) = [SpanNil, rest] ++ [SpanCons a l' | l' <- shrink rest]++instance Arbitrary SpanZipper where+  arbitrary = oneof [pure SZNil, SZ <$> arbitrary <*> arbitrary <*> arbitrary]+  shrink SZNil = []+  shrink (SZ l x r) = [SZ l' x r' | (l',r') <- shrink (l,r)]++newtype TestUID = TestUID Int deriving Show+instance Arbitrary TestUID where arbitrary = TestUID . succ . abs <$> arbitrary++prop_SpanList1 :: [Span] -> Bool+prop_SpanList1 xx = toList(fromList xx :: SpanList) == xx+prop_SpanList2 :: SpanList -> Bool+prop_SpanList2 xx = fromList(toList xx) == xx++prop_SpanZipper1 :: [Span] -> Bool+prop_SpanZipper1 xx = toList(fromList xx :: SpanZipper) == xx+prop_SpanZipper2 :: SpanZipper -> Bool+prop_SpanZipper2 xx = toList(fromList (toList xx) :: SpanZipper) == toList xx++prop_LR, prop_RL :: SpanZipper -> Property+prop_LR x = isJust(moveRight x) ==> (moveLeft  =<< moveRight x) == Just x+prop_RL x = isJust(moveLeft  x) ==> (moveRight =<< moveLeft  x) == Just x++prop_start (TestUID x) sz = toList(startSpan x sz) == Computing x : toList sz++return []+runSpanTests = $quickCheckAll
+ Debug/Hoed/TH.hs view
@@ -0,0 +1,117 @@+{-# LANGUAGE TupleSections   #-}+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}+{-# LANGUAGE TemplateHaskell #-}+module Debug.Hoed.TH (debug, obs) where++import           Control.Monad+import           Data.Generics.Uniplate.Data+import           Data.List                   (group, nub, sort, (\\))+import           Debug.Hoed+import           Debug.Hoed.Compat+import           Language.Haskell.TH+import           Language.Haskell.TH.Syntax++-- | A handy TH wrapper for observing functions.+--+--   @+--   obs [d|+--     trimPat :: Exp S -> Pat S -> Pat S+--     trimPat vs = filterPat ((`Set.member` freeVars vs) . void)+--       |]+--   @+--+--   is equivalent to:+--+--   @+--   trimPat = observe "trimPat" trimPat'+--   trimPat' vs = filterPat ....+--   @+--+--   'obs' 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.+--+obs :: Q [Dec] -> Q [Dec]+obs decs = do+  decs <- decs+  names <- sequence [ (n,) <$> newName(nameBase n ++ "Obs") | FunD n _ <- decs]+  fmap concat $ forM decs $ \dec ->+    case dec of+      FunD n xx -> do+        let Just n' = lookup n names+            nb = nameBase n+        newDecl <- funD n [clause [] (normalB [| observe nb $(varE n')|]) []]+        return [newDecl, FunD n' xx]+      SigD n ty | Just n' <- lookup n names -> do+        dec' <- adjustSig n ty+        return [dec']+      _ ->+        return [dec]++-- | A handy TH wrapper for debugging functions, offering more information than 'obs'+--+--   @+--   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+--   @+--+--   The additional information may lead to unnecessary questions in algorithmic+--   debugging, 'obs' is the recommended wrapper for that purpose.+debug :: Q [Dec] -> Q [Dec]+debug q = do+  decs <- q+  names <- sequence [ (n,) <$> newName(nameBase n ++ "Debug") | FunD n _ <- decs]+  fmap concat $ forM decs $ \dec ->+    case dec of+      FunD n clauses -> do+        let Just n' = lookup n names+            nb = nameBase n+        newDecl <- funD n [clause [] (normalB [| observe nb $(varE n')|]) []]+        let clauses' = transformBi adjustValD clauses+        return [newDecl, FunD n' clauses']+      SigD n ty | Just n' <- lookup n names -> do+        dec' <- adjustSig n ty+        return [dec']+      _ ->+        return [dec]++nubOrd :: Ord a => [a] -> [a]+nubOrd = map head . group . sort++----------------------------------------------------------+-- With a little help from Neil Mitchell's debug package++-- | List all the type variables of kind * (or do the best you can)+kindStar :: Type -> Q [Name]+-- in Q so we should be able to use 'reify' to do a better job+kindStar t = return $+    nubOrd [x | VarT x <- universe t] \\     -- find all variables+    nubOrd [x | AppT (VarT x) _ <- universe t] -- delete the "obvious" ones++-- try and shove in a "Observable a =>" if we can+adjustSig name (ForallT vars ctxt typ) = do+  vs <- kindStar typ+  return $+    SigD name $+    ForallT vars (nub $ map (addConstraint ''Observable . (:[]) . VarT) vs ++ ctxt) typ+adjustSig name other = adjustSig name $ ForallT [] [] other++adjustValD decl@ValD{} = transformBi adjustPat decl+adjustValD other       = other++adjustPat (VarP x) = ViewP (VarE 'observe `AppE` toLit x) (VarP x)+adjustPat x        = x++toLit (Name (OccName x) _) = LitE $ StringL x
Hoed.cabal view
@@ -1,48 +1,116 @@ name:                Hoed-version:             0.4.0+version:             0.4.1 synopsis:            Lightweight algorithmic debugging. description:     Hoed is a tracer and debugger for the programming language Haskell.     .-    To locate a defect with Hoed you annotate suspected functions and compile as usual. Then you run your program, information about the annotated functions is collected. Finally you connect to a debugging session using a webbrowser.+    To locate a defect with Hoed you annotate suspected functions and compile as usual. Then you run your program, information about the annotated functions is collected. Finally you connect to a debugging session.     .-homepage:            https://wiki.haskell.org/Hoed+homepage:            https://github.com/MaartenFaddegon/Hoed license:             BSD3 license-file:        LICENSE author:              Maarten Faddegon maintainer:          hoed@maartenfaddegon.nl-copyright:           (c) 2000 Andy Gill, (c) 2010 University of Kansas, (c) 2013-2017 Maarten Faddegon+copyright:           (c) 2000 Andy Gill, (c) 2010 University of Kansas, (c) 2013-2018 Maarten Faddegon category:            Debug, Trace build-type:          Simple cabal-version:       >=1.10-extra-source-files:  changelog, README.md, configure.Demo, configure.Generic, configure.Profiling, configure.Prop, configure.Pure, run, test.Generic, test.Pure-data-files:          img/*.png, img/*.gif+extra-source-files:  changelog, README.md, configure.Demo, configure.Generic, configure.Profiling, configure.Prop, configure.Pure, run, test.Generic, test.Pure, tests/ref/*.graph   source-repository head   type:     git   location: https://github.com/MaartenFaddegon/Hoed.git  library-  exposed-modules:     Debug.Hoed+  exposed-modules:     Debug.Hoed.Observe+                       , Debug.Hoed+                       , Debug.Hoed.TH                        , Debug.NoHoed-  other-modules:       Debug.Hoed.Observe-                       , Debug.Hoed.EventForest                        , Debug.Hoed.CompTree                        , Debug.Hoed.Render+  other-modules:       Debug.Hoed.Compat+                       , Debug.Hoed.EventForest                        , Debug.Hoed.ReadLine                        , Debug.Hoed.Console+                       , Debug.Hoed.Fields                        , Debug.Hoed.Prop                        , Debug.Hoed.Serialize+                       , Debug.Hoed.Span                        , Text.PrettyPrint.FPretty                        , Paths_Hoed   build-depends:       base >= 4 && <5                        , array, containers+                       , clock+                       , deepseq                        , process-                       , filepath                        , libgraph == 1.14-                       , regex-posix-                       , mtl+                       , regex-tdfa                        , directory                        , cereal, bytestring-                       , time+                       , QuickCheck+                       , semigroups+                       , strict+                       , template-haskell+                       , terminal-size+                       , uniplate+                       , vector   default-language:    Haskell2010++Test-Suite test-queens+  type:             exitcode-stdio-1.0+  hs-source-dirs:   examples/Queens__with_properties/+  main-is:          Test1.hs+  other-modules:    Properties, Queens, Types+  build-depends:    base >= 4 && <5+                    , QuickCheck+                    , Hoed+  default-language: Haskell2010++Test-Suite test-1+  type:             exitcode-stdio-1.0+  hs-source-dirs:   tests/Pure/+  main-is:          t1.hs+  build-depends:    base >= 4 && <5, QuickCheck, Hoed, process+  default-language: Haskell2010++Test-Suite test-2+  type:             exitcode-stdio-1.0+  hs-source-dirs:   tests/Pure/+  main-is:          t2.hs+  build-depends:    base >= 4 && <5, QuickCheck, Hoed, process+  default-language: Haskell2010++Test-Suite test-3+  type:             exitcode-stdio-1.0+  hs-source-dirs:   tests/Pure/+  main-is:          t3.hs+  build-depends:    base >= 4 && <5, QuickCheck, Hoed, process+  default-language: Haskell2010++Test-Suite test-4+  type:             exitcode-stdio-1.0+  hs-source-dirs:   tests/Pure/+  main-is:          t4.hs+  build-depends:    base >= 4 && <5, QuickCheck, Hoed, process+  default-language: Haskell2010++Test-Suite test-5+  type:             exitcode-stdio-1.0+  hs-source-dirs:   tests/Pure/+  main-is:          t5.hs+  build-depends:    base >= 4 && <5, QuickCheck, Hoed, process+  default-language: Haskell2010++Test-Suite test-6+  type:             exitcode-stdio-1.0+  hs-source-dirs:   tests/Pure/+  main-is:          t6.hs+  build-depends:    base >= 4 && <5, QuickCheck, Hoed, process+  default-language: Haskell2010++Test-Suite test-7+  type:             exitcode-stdio-1.0+  hs-source-dirs:   tests/Pure/+  main-is:          t7.hs+  build-depends:    base >= 4 && <5, QuickCheck, Hoed, process+  default-language: Haskell2010
README.md view
@@ -1,10 +1,6 @@ # Hoed - A Lightweight Haskell Tracer and Debugger  -Hoed is a tracer and debugger for the programming language Haskell. To locate a defect with Hoed you annotate suspected functions and compile as usual. Then you run your program, information about the annotated functions is collected. Finally you connect to a debugging session using a webbrowser. See the--  [**Project homepage**](http://wiki.haskell.org/Hoed)--for more information on what it does and how you can use it to find bugs in your code.+Hoed is a tracer and debugger for the programming language Haskell. To locate a defect with Hoed you annotate suspected functions and compile as usual. Then you run your program, information about the annotated functions is collected. Finally you connect to a debugging session.  Submit feature requests or contribute code on the 
Text/PrettyPrint/FPretty.hs view
@@ -122,6 +122,7 @@   -- on Functional Data Structures.   -- Efficiency probably similar, but Data.Sequence is part of the standard Haskell    -- libraries.+import Data.String  infixr 6 <>,<+> infixr 5 <$>,<$$>,</>,<//>@@ -247,6 +248,9 @@          | Nest Int Doc     -- increase current indentation          | Align Int Doc    -- set indentation to current column plus increment   deriving Show++instance IsString Doc where+  fromString = text  empty = Nil text t = Text (length t) t
+ examples/Queens__with_properties/Properties.hs view
@@ -0,0 +1,177 @@+module Properties where+import Debug.Hoed+import Data.List+import Data.Maybe+import Test.QuickCheck hiding ((===))+import Test.QuickCheck.Property hiding ((===))+import Test.QuickCheck.Gen+import Test.QuickCheck.Random+import Control.Monad+import Types++properties3 = [ Propositions +                [ mkProposition m1 "prop_queens_sound"+                    `ofType` BoolProposition+                    `withSignature` [SubjectFunction,Argument 0]+                    `sizeHint` 4+                , mkProposition m1 "prop_queens_complete" +                     `ofType` QuickCheckProposition+                     `withSignature` [SubjectFunction,Argument 0,Random]+                     `sizeHint` 4+                ] Specify "queens" [m2a,m3]+             , Propositions +                [ mkProposition m1 "prop_valid_sound" +                    `ofType` BoolProposition+                    `withSignature` [SubjectFunction,Argument 0,Argument 1]+                     `sizeHint` 4+                , mkProposition m1 "prop_valid_complete" +                    `ofType` QuickCheckProposition+                    `withSignature` [SubjectFunction,Argument 0,Argument 1,Random]+                     `sizeHint` 4+                ] Specify "valid" [m2a,m3]+             , Propositions +                [ mkProposition m1 "prop_extend_sound"+                    `ofType` BoolProposition `withSignature` [SubjectFunction,Argument 0,Argument 1]+                , mkProposition m1 "prop_extend_complete"+                    `ofType` BoolProposition `withSignature` [SubjectFunction,Argument 0,Argument 1]+                ] Specify "extend" [m2a,m3]+             , Propositions +                [ mkProposition m1 "spec_safe"+                    `ofType` QuickCheckProposition `withSignature` [SubjectFunction,Argument 0]+                ] Specify "safe" [m2a,m3]+             , Propositions +                [ mkProposition m1 "spec_no_threat"+                    `ofType` QuickCheckProposition `withSignature` [SubjectFunction,Argument 0,Argument 1,Argument 2]+                ] Specify "no_threat" [m2a,m3]+             ]+  where+  m2a = Module "Queens3"     "../examples/Queens__with_properties/"++properties2 = [ Propositions +                [ mkProposition m1 "spec_queensFilter"+                    `ofType` BoolProposition+                    `withSignature` [SubjectFunction,Argument 0]+                , mkProposition m1 "spec_queensFilter_p"+                    `ofType` BoolProposition+                    `withSignature` [SubjectFunction,Argument 0]+                ] Specify "queensFilter" [m2,m3]+              ]++properties = [ Propositions +                [ mkProposition m1 "prop_queens_sound"+                    `ofType` BoolProposition+                    `withSignature` [SubjectFunction,Argument 0]+                    `sizeHint` 4+                , mkProposition m1 "prop_queens_complete" +                     `ofType` QuickCheckProposition+                     `withSignature` [SubjectFunction,Argument 0,Random]+                     `sizeHint` 4+                ] Specify "queens" [m2,m3]+             , Propositions +                [ mkProposition m1 "prop_valid_sound" +                    `ofType` BoolProposition+                    `withSignature` [SubjectFunction,Argument 0,Argument 1]+                     `sizeHint` 4+                , mkProposition m1 "prop_valid_complete" +                    `ofType` QuickCheckProposition+                    `withSignature` [SubjectFunction,Argument 0,Argument 1,Random]+                     `sizeHint` 4+                ] Specify "valid" [m2,m3]+             , Propositions +                [ mkProposition m1 "prop_extend_sound"+                    `ofType` BoolProposition `withSignature` [SubjectFunction,Argument 0,Argument 1]+                , mkProposition m1 "prop_extend_complete"+                    `ofType` BoolProposition `withSignature` [SubjectFunction,Argument 0,Argument 1]+                ] Specify "extend" [m2,m3]+             , Propositions +                [ mkProposition m1 "spec_safe"+                    `ofType` QuickCheckProposition `withSignature` [SubjectFunction,Argument 0]+                ] Specify "safe" [m2,m3]+             , Propositions +                [ mkProposition m1 "spec_no_threat"+                    `ofType` QuickCheckProposition `withSignature` [SubjectFunction,Argument 0,Argument 1,Argument 2]+                ] Specify "no_threat" [m2,m3]+             ]++m1 = Module "Properties" "../examples/Queens__with_properties/"+m2 = Module "Queens"     "../examples/Queens__with_properties/"+m3 = Module "Types"     "../examples/Queens__with_properties/"++prop_queens_set q n = all (\(B b) -> isSet b) (q n)++prop_safe_set s b = not (isSet b && s (B b))++prop_queens_sound q n      = all (\b -> completeSolution n b && validSolution n n b) (q n)+prop_queens_complete q n b = completeSolution n b && validSolution n n b ==> b `elem` (q n)++prop_valid_sound :: (Int -> Int -> [Board]) -> Int -> Int -> Bool+prop_valid_sound v m n = all (\b -> validSolution m n b) (v m n)++prop_valid_complete v m n b = completeSolution m b && validSolution m n b ==> b `elem` (v m n)++completeSolution :: Int -> Board -> Bool+completeSolution m (B b) = length b == m && all (`elem` [1..m]) b++norepeats (B b) = nub b == b++validSolution' :: Board -> Bool+validSolution' (B [])  = True+validSolution' (B [x]) = True+validSolution' (B b)   = validSolution (maximum b) (max (length b) (maximum b)) (B b)++validSolution :: Int -> Int -> Board -> Bool+validSolution 0 n (B b) = b == []+validSolution m n (B b)+  -- = m >= n &&+  = onBoard n b && isSet b+  && isSet (diagonals n b) && isSet (diagonals n (reverse b))++onBoard :: Int -> [Int] -> Bool+onBoard n b = all (\i -> i > 0 && i <= n) b++spec_safe :: (Board -> Bool) -> Board -> Property+spec_safe s b = nonEmptyBoard b && validSolution' (btail b) ==> s b == validSolution' b++nonEmptyBoard (B b) = b /= []++spec_no_threat :: (Int -> Board -> Int -> Bool) -> Int -> Board -> Int -> Property+spec_no_threat n a (B b) m = validSolution' (B b) ==> validSolution' (B (a:b)) == n a (B b) m++-- In a set every element occurs exactly once+isSet xs = all (\x -> length (filter (==x) xs) == 1) xs++-- Give for each queen on the board (i.e. the list of column+-- positions) in which diagonal this queen is placed.+--+--  3   2   1   0+--  2   1   0  -1+--  1   0  -1  -2+--  0  -1  -2  -3+--+diagonals :: Int -> [Int] -> [Int]+diagonals n b = zipWith (-) b [1..n]++prop_extend_complete e n bs = length (e n bs) == n * (length bs)++prop_extend_sound :: (Int -> [Board] -> [Board]) -> Int -> [Board] -> Bool+prop_extend_sound e n bs +  | all (completeSolution n) bs && all norepeats bs+      = all extend_sound_board (zip3 bs' is ds)+  | otherwise                   = True+  where ds = e n bs+        is = cycle [1..n]+        bs' = foldr (\b z -> replicate n b ++ z) [] bs++extend_sound_board (B b, i, B [])    = False+extend_sound_board (B b, i, B (j:e)) = i == j && b == e++btail (B b) = B (tail b)+bnull (B b)  = null b+bcon a (B b) = B (a:b)+ball f (B b) = all f b++spec_queensFilter_p, spec_queensFilter :: ([Configuration] -> [Configuration]) -> [Configuration] -> Bool+spec_queensFilter   q cs = q cs == filter validConfiguration cs+spec_queensFilter_p q cs = q cs === filter validConfiguration cs++validConfiguration (Configuration i b) = validSolution' b
+ examples/Queens__with_properties/Queens.hs view
@@ -0,0 +1,97 @@+module Queens where+-- The queens problem made famous by Wirth.+import Debug.Hoed+import Data.List+import Test.QuickCheck+import Data.Maybe+import Test.QuickCheck+import Test.QuickCheck.Property+import Test.QuickCheck.Gen+import Test.QuickCheck.Random+import Properties+import Types++test1 :: IO ()+test1 = do+  (HoedAnalysis _ ct) <- runO' defaultHoedOptions (print $ queens 5)+  -- TODO compare ct with a stored version to do regression testing+  return ()++doit :: IO ()+doit = testOwp properties (prop_queens_set queens) 8++queens :: Int -> [Board]+queens = observe "queens" (\n -> valid n n)++-- How can we place m queens on an n*n board?+valid :: Int -> Int -> [Board]+valid = observe "valid" valid'+valid' 0 _ = [B []]+valid' m n+ -- A correct definition:+ = filter safe (extend n (valid (m-1) n))+ -- A defective definition:+ --  = filter safe (extend n (valid (m-1) (n-1)))++extend :: Int -> [Board] -> [Board]+extend = observe "extend" (\n bs -> consEach [1..n] bs)++consEach :: [Int] -> [Board] -> [Board]+consEach = observe "consEach" consEach'+consEach' [] bs    = []+consEach' (a:x) bs = map (\(B b) -> B (a:b)) bs ++ consEach x bs++safe :: Board -> Bool+safe = observe "safe" safe'+safe' (B (a:b)) = no_threat a (B b) 1++no_threat :: Int -> Board -> Int -> Bool+no_threat = observe "no_threat" no_threat'+no_threat' a (B []) m = True+no_threat' a (B (b:y)) m+ -- A correct definition:+ -- = a /= b && a+m /= b && a-m /= b && no_threat a (B y) (m+1)+ -- A defective definition:+  = a+m /= b && a-m /= b && no_threat a (B y) (m+1)++--------------------------------------------------------------------------------+-- demonstrating the need for parallel equality++configurations :: Int -> [Configuration]+configurations n = zipWith (\i b -> Configuration i (B b)) [1..] +                        (configurations' n [1..n])+configurations' :: Int -> [Int] -> [[Int]]+configurations' n xs +  | n > 0  = [x:t | x <- xs, t <- configurations' (n-1) xs]+  | n <= 0 = [[]]++queensFilter :: [Configuration] -> [Configuration]+queensFilter = observe "queensFilter" queensFilter'+queensFilter' (Configuration i b:t)+  | safe b    = Configuration i b : t+  | otherwise = t++doit2 :: IO ()+doit2 = printOwp properties2 (b1,b2)+  where ((Configuration _ b1) : (Configuration _ b2) : _) = queensFilter cs+        cs = (Configuration 1 (B [1,1,1,1])) : (Configuration 2 (B [2,4,1,3])) : [(Configuration 3 (B [1,1,1,1]))]++--------------------------------------------------------------------------------++showBoard :: Board -> String +showBoard = observe "showBoard" showBoard'+showBoard' (B b) =+  let rank r qcol =+        map line ["o o o", " \\|/ ", " === "]+        where+        line crown_slice =+          concat (zipWith square [1..] b)+          where+          square scol _ =+            if scol == qcol then crown_slice+            else if scol `rem` (2::Int) == r `rem` (2::Int) then "....."+            else "     "+  in unlines (concat (zipWith rank [1..] b))+++
+ examples/Queens__with_properties/Test1.hs view
@@ -0,0 +1,3 @@+import Queens++main = test1
+ examples/Queens__with_properties/Types.hs view
@@ -0,0 +1,28 @@+{-# LANGUAGE DeriveGeneric #-}++module Types where+import Test.QuickCheck hiding ((===))+import Debug.Hoed++data Board = B [Int] deriving (Eq, Show, Generic)++instance Observable Board+instance ParEq Board++instance Arbitrary Board where +  arbitrary = do b <- genBoard; return (B b)++genBoard :: Gen [Int]+genBoard = sized $ \n ->+  do m <- choose (0,n)+     k <- choose (0,n)+     vectorOf k (genPos m)++genPos :: Int -> Gen Int  +genPos n | n < 1 = return 1+genPos n = elements [1..n]++data Configuration = Configuration Int Board+  deriving (Show,Eq, Generic)+instance Observable Configuration+instance ParEq Configuration
− img/faulty.png

binary file changed (20469 → absent bytes)

− img/hoed-logo.png

binary file changed (229149 → absent bytes)

− img/loading.gif

binary file changed (22954 → absent bytes)

− img/right.png

binary file changed (3529 → absent bytes)

− img/test.png

binary file changed (3876 → absent bytes)

− img/unassessed.png

binary file changed (6764 → absent bytes)

− img/wrong.png

binary file changed (1866 → absent bytes)

+ tests/Pure/t1.hs view
@@ -0,0 +1,18 @@+import Debug.Hoed+import System.Process(system)+import System.Exit(exitWith)++f :: Int -> Int+f = observe "f" f'+f' x = if x > 0 then g x else 0++g :: Int -> Int+g = observe "g" g'+g' x = x `div` 2++main = do+  logO "hoed-tests-Pure-t1.graph" $ print ((f 2) + (f 0))+  i <- system "diff hoed-tests-Pure-t1.graph tests/ref/hoed-tests-Pure-t1.graph"+  exitWith i+  +
+ tests/Pure/t2.hs view
@@ -0,0 +1,24 @@+import Debug.Hoed+import System.Process(system)+import System.Exit(exitWith)++k :: Int -> Int+k  = observe "k" k'+k' x = (l x) + (m $ x + 1)++l :: Int -> Int+l  = observe "l" l'+l' x  = m x++m :: Int -> Int+m  = observe "m" m'+m' x = n x++n :: Int -> Int+n  = observe "n" n'+n' x = x++main = do+  logO "hoed-tests-Pure-t2.graph" $ print (k 1)+  i <- system "diff hoed-tests-Pure-t2.graph tests/ref/hoed-tests-Pure-t2.graph"+  exitWith i
+ tests/Pure/t3.hs view
@@ -0,0 +1,27 @@+-- Haskell version of the buggy insertion sort as shown in Lee Naish+-- A Declarative Debugging Scheme.++{-# LANGUAGE StandaloneDeriving #-}+import Debug.Hoed+import System.Process(system)+import System.Exit(exitWith)++-- Insertion sort.+isort :: [Int] -> [Int]+isort = observe "isort" isort'+isort' []     = []+isort' (n:ns) = insert n (isort ns)++-- Insert number into sorted list.+insert :: Int -> [Int] -> [Int]+insert = observe "insert" insert'+insert' :: Int -> [Int] -> [Int]+insert' n []      = [n]+insert' n (m:ms)+      | n <= m    = n : ms -- bug: `m' is missing in this case+      | otherwise = m : (insert n ms)++main = do+  logO "hoed-tests-Pure-t3.graph" $ print (isort [1,2])+  i <- system "diff hoed-tests-Pure-t3.graph tests/ref/hoed-tests-Pure-t3.graph"+  exitWith i
+ tests/Pure/t4.hs view
@@ -0,0 +1,30 @@+-- A defective implementation of a parity function with a test property.++import Debug.Hoed+import System.Process(system)+import System.Exit(exitWith)++isOdd :: Int -> Bool+isOdd = observe "isOdd" isOdd'+isOdd' n = isEven (plusOne n)++isEven :: Int -> Bool+isEven = observe "isEven" isEven'+isEven' n = mod2 n == 0++plusOne :: Int -> Int+plusOne = observe "plusOne" plusOne'+plusOne' n = n + 1++mod2 :: Int -> Int+mod2 = observe "mod2" mod2'+mod2' n = div n 2++prop_isOdd :: Int -> Bool+prop_isOdd x = isOdd (2*x+1)++main :: IO ()+main = do+  logO "hoed-tests-Pure-t4.graph" $ print (prop_isOdd 1)+  i <- system "diff hoed-tests-Pure-t3.graph tests/ref/hoed-tests-Pure-t3.graph"+  exitWith i
+ tests/Pure/t5.hs view
@@ -0,0 +1,18 @@+import Debug.Hoed+import System.Process(system)+import System.Exit(exitWith)++f :: Maybe Int -> Int+f = observe "f" f'+f' (Just i) = g i+f' Nothing  = 0++g :: Int -> Int+g = observe "g" g'+g' x = x + x++main :: IO ()+main = do+  logO "hoed-tests-Pure-t5.graph" $ print (f $ Just 3)+  i <- system "diff hoed-tests-Pure-t5.graph tests/ref/hoed-tests-Pure-t5.graph"+  exitWith i
+ tests/Pure/t6.hs view
@@ -0,0 +1,25 @@+{-# LANGUAGE DeriveGeneric #-}+module Main where+import Debug.Hoed+import System.Process(system)+import System.Exit(exitWith)++-- This test demonstrates that using the FPretty library we pretty print+-- much bigger computation statements than with the previous implementation+-- based on Wadler's "prettier printer".++data T = Step T | End deriving Generic+instance Observable T++v :: T+v = foldr (\_ -> Step) End [1..1000]++ends :: T -> Bool+ends = observe "ends" ends'+ends' (Step t) = ends' t+ends' End      = True++main = do+  logO "hoed-tests-Pure-t6.graph" $ print $ ends v+  i <- system "diff hoed-tests-Pure-t6.graph tests/ref/hoed-tests-Pure-t6.graph"+  exitWith i
+ tests/Pure/t7.hs view
@@ -0,0 +1,23 @@+import Debug.Hoed+import System.Process(system)+import System.Exit(exitWith)++plus :: Int -> Int -> Int+plus = {- observe "plus"-} (+)++apx :: (Int -> Int) -> Int -> Int+apx = {- observe "apx" -} apx'+apx' f x = f x++apxy :: (Int -> Int -> Int) -> Int -> Int -> Int+apxy = observe "apxy" apxy'+apxy' f x y = f x y++ap45' :: (Int->Int->Int) -> Int+ap45 = observe "ap45" ap45'+ap45' f = apx (apxy f 4) 5++main = do+  logO "hoed-tests-Pure-t7.graph" $ print (ap45 plus)+  i <- system "diff hoed-tests-Pure-t7.graph tests/ref/hoed-tests-Pure-t7.graph"+  exitWith i
+ tests/ref/hoed-tests-Prop-t0.graph view
@@ -0,0 +1,51 @@+diGraph G {+v24 [label="Assisted [InconclusiveProperty \"\\n---\\n\\nApplying property prop_idemZero gives inconclusive result:\\n\\n[Escaping Exception in Code : Request of value that was unevaluated in original program.]\\n\"]: zero (Const _) = Const _"]+v23 [label="Assisted [PassingProperty \"prop_idemZero\"]: zero (Const 1) = Const 1"]+v22 [label="Assisted [PassingProperty \"prop_idemZero\"]: zero (Const 1) = Const 1"]+v21 [label="Assisted [InconclusiveProperty \"\\n---\\n\\nApplying property prop_idemZero gives inconclusive result:\\n\\n[Escaping Exception in Code : Request of value that was unevaluated in original program.]\\n\"]: zero (Mul (Const _) (Const 1)) = Mul (Const _) (Const 1)"]+v20 [label="Assisted [PassingProperty \"prop_idemZero\"]: zero (Const 2) = Const 2"]+v19 [label="Assisted [PassingProperty \"prop_idemZero\"]: zero (Mul (Const 1) (Const 2)) = Mul (Const 1) (Const 2)"]+v18 [label="Assisted [PassingProperty \"prop_idemZero\"]: zero (Const 2) = Const 2"]+v17 [label="Assisted [InconclusiveProperty \"\\n---\\n\\nApplying property prop_idemZero gives inconclusive result:\\n\\n[Escaping Exception in Code : Request of value that was unevaluated in original program.]\\n\"]: zero (Mul _ (Const 2)) = Mul _ (Const 2)"]+v16 [label="Assisted [InconclusiveProperty \"\\n---\\n\\nApplying property prop_idemOne gives inconclusive result:\\n\\n[Escaping Exception in Code : Request of value that was unevaluated in original program.]\\n\"]: one (Const _) = Const _"]+v15 [label="Assisted [PassingProperty \"prop_idemOne\"]: one (Const 1) = Const 1"]+v14 [label="Assisted [PassingProperty \"prop_idemOne\"]: one (Const 1) = Const 1"]+v13 [label="Assisted [InconclusiveProperty \"\\n---\\n\\nApplying property prop_idemOne gives inconclusive result:\\n\\n[Escaping Exception in Code : Request of value that was unevaluated in original program.]\\n\"]: one (Mul (Const _) (Const 1)) = Const _"]+v12 [label="Assisted [PassingProperty \"prop_idemOne\"]: one (Const 2) = Const 2"]+v11 [label="Assisted [InconclusiveProperty \"Simpler tree suggested with complexity 9(current tree has complexity of 120)\"]: one (Mul (Const 1) (Const 2)) = Mul (Const _) (Const 1)"]+v10 [label="Assisted [PassingProperty \"prop_idemOne\"]: one (Const 2) = Const 2"]+v9 [label="Assisted [InconclusiveProperty \"\\n---\\n\\nApplying property prop_idemOne gives inconclusive result:\\n\\n[Escaping Exception in Code : Request of value that was unevaluated in original program.]\\n\"]: one (Mul _ (Const 2)) = Mul _ _"]+v8 [label="Assisted [InconclusiveProperty \"\\n---\\n\\nApplying property prop_idemSimplify gives inconclusive result:\\n\\n[Escaping Exception in Code : Request of value that was unevaluated in original program.]\\n\"]: simplify (Const _) = Const _"]+v7 [label="Assisted [PassingProperty \"prop_idemSimplify\"]: simplify (Const 1) = Const 1"]+v6 [label="Assisted [PassingProperty \"prop_idemSimplify\"]: simplify (Const 1) = Const 1"]+v5 [label="Assisted [PassingProperty \"prop_idemSimplify\"]: simplify (Const 2) = Const 2"]+v4 [label="Assisted [InconclusiveProperty \"We found values for the unevaluated expressions in the current statement that falsify\\na property, however the resulting tree is not simpler.\"]: simplify (Mul (Const 1) (Const 2)) = Mul (Const _) (Const 1)"]+v3 [label="Assisted [InconclusiveProperty \"\\n---\\n\\nApplying property prop_idemSimplify gives inconclusive result:\\n\\n[Escaping Exception in Code : Request of value that was unevaluated in original program.]\\n\"]: simplify (Mul (Const _) (Const 1)) = Const _"]+v2 [label="Assisted [PassingProperty \"prop_idemSimplify\"]: simplify (Const 2) = Const 2"]+v1 [label="Assisted [InconclusiveProperty \"\\n---\\n\\nApplying property prop_idemSimplify gives inconclusive result:\\n\\n[Escaping Exception in Code : Request of value that was unevaluated in original program.]\\n\"]: simplify (Mul _ (Const 2)) = Mul _ _"]+v0 [label=root]+v0 -> v1 [label=""]+v1 -> v9 [label=""]+v1 -> v2 [label=""]+v2 -> v10 [label=""]+v2 -> v18 [label=""]+v1 -> v17 [label=""]+v0 -> v3 [label=""]+v4 -> v5 [label=""]+v5 -> v12 [label=""]+v5 -> v20 [label=""]+v3 -> v13 [label=""]+v3 -> v6 [label=""]+v6 -> v15 [label=""]+v6 -> v23 [label=""]+v4 -> v19 [label=""]+v4 -> v7 [label=""]+v7 -> v14 [label=""]+v7 -> v22 [label=""]+v3 -> v21 [label=""]+v3 -> v8 [label=""]+v0 -> v4 [label=""]+v4 -> v11 [label=""]+v8 -> v16 [label=""]+v8 -> v24 [label=""]+}
+ tests/ref/hoed-tests-Prop-t1.graph view
@@ -0,0 +1,15 @@+diGraph G {+v6 [label="Right: negin (N (V 'r')) = N (V 'r')"]+v5 [label="Assisted [PassingProperty \"prop_negin_complete\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_negin_sound gives inconclusive result:\\n\\n[Escaping Exception in Code : Request of value that was unevaluated in original program.]\\n\"]: negin (V _) = V _"]+v4 [label="Assisted [PassingProperty \"prop_negin_complete\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_negin_sound gives inconclusive result:\\n\\n[Escaping Exception in Code : Request of value that was unevaluated in original program.]\\n\"]: negin (N (N (V _))) = V _"]+v3 [label="Right: negin (N (V 'p')) = N (V 'p')"]+v2 [label="Assisted [InconclusiveProperty \"Simpler tree suggested with complexity 20(current tree has complexity of 30)\"]: negin (N (A (V 'p') (N (V _)))) = A (N (V 'p')) (V _)"]+v1 [label="Assisted [PassingProperty \"prop_negin_complete\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_negin_sound gives inconclusive result:\\n\\n[Escaping Exception in Code : Request of value that was unevaluated in original program.]\\n\"]: negin (N (O (A (V 'p') (N (V _))) (V 'r'))) = O (A (N (V 'p')) (V _)) (N (V 'r'))"]+v0 [label=root]+v2 -> v4 [label=""]+v4 -> v5 [label=""]+v1 -> v2 [label=""]+v2 -> v3 [label=""]+v0 -> v1 [label=""]+v1 -> v6 [label=""]+}
+ tests/ref/hoed-tests-Prop-t2.graph view
@@ -0,0 +1,13 @@+diGraph G {+v5 [label="Right: mergeAndSortTargets (('v', \"v\") : []) = ('v', \"v\") : []"]+v4 [label="Assisted [InconclusiveProperty \"Simpler tree suggested with complexity 38(current tree has complexity of 90)\"]: mergeAndSortTargets (('s', \"tvtv\") : ('v', \"v\") : []) = ('s', \"ttvv\") : ('v', \"v\") : []"]+v3 [label="Assisted [InconclusiveProperty \"Simpler tree suggested with complexity 57(current tree has complexity of 90)\"]: mergeAndSortTargets (('s', \"t\") : ('s', \"vtv\") : ('v', \"v\") : []) = ('s', \"ttvv\") : ('v', \"v\") : []"]+v2 [label="Right: addMissingSources (('s', \"ttvv\") : ('v', \"v\") : []) = ('s', 't' : 't' : _) : ('t', _) : ('t', _) : ('v', _) : []"]+v1 [label="Assisted [InconclusiveProperty \"We found values for the unevaluated expressions in the current statement that falsify\\na property, however the resulting tree is not simpler.\"]: assoc1toNdigraph (('v', \"v\") : ('s', \"t\") : ('s', \"vtv\") : []) = ('s', 't' : 't' : _) : ('t', _) : ('t', _) : ('v', _) : []"]+v0 [label=root]+v1 -> v3 [label=""]+v3 -> v4 [label=""]+v4 -> v5 [label=""]+v0 -> v1 [label=""]+v1 -> v2 [label=""]+}
+ tests/ref/hoed-tests-Prop-t3.graph view
@@ -0,0 +1,13 @@+diGraph G {+v5 [label="Unassessed: focusUp' (Stack 'a' \"y\" []) = Stack 'y' [] []"]+v4 [label="Unassessed: focusUp' (Stack 'r' \"ay\" []) = Stack 'a' \"y\" []"]+v3 [label="Assisted [InconclusiveProperty \"Simpler tree suggested with complexity 30(current tree has complexity of 41)\"]: focusUp (StackSet (Screen (Workspace (NonNegative 0) _ (Just (Stack 'a' \"y\" []))) 0 0) _ _ _) = StackSet (Screen (Workspace (NonNegative 0) _ (Just (Stack 'y' [] []))) 0 0) _ _ _"]+v2 [label="Assisted [InconclusiveProperty \"We found values for the unevaluated expressions in the current statement that falsify\\na property, however the resulting tree is not simpler.\"]: focusUp (StackSet (Screen (Workspace (NonNegative 0) _ (Just (Stack 'r' \"ay\" []))) 0 0) _ _ _) = StackSet (Screen (Workspace (NonNegative 0) _ (Just (Stack 'a' \"y\" []))) 0 0) _ _ _"]+v1 [label="Unassessed: focusWindow 'y' (StackSet (Screen (Workspace (NonNegative 0) _ (Just (Stack 'r' \"ay\" []))) 0 0) _ _ _) = StackSet (Screen (Workspace (NonNegative 0) _ (Just (Stack 'y' [] []))) 0 0) _ _ _"]+v0 [label=root]+v0 -> v1 [label=""]+v1 -> v3 [label=""]+v3 -> v5 [label=""]+v1 -> v2 [label=""]+v2 -> v4 [label=""]+}
+ tests/ref/hoed-tests-Prop-t4.graph view
@@ -0,0 +1,25 @@+diGraph G {+v11 [label="Assisted [PassingProperty \"prop_view_current\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_local gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_local\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_local {- generateArgs -} (NonNegative ((1)) ) {- more: [Just 434: Enter (P 433 1),Just 435: Fun (P 433 1)] -} {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 436: Enter (P 435 1),Just 437: Cons 4 \\\"StackSet\\\" (P 435 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:152:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the first argument of \\8216prop_view_local\\8217, namely\\n \\8216(NonNegative ((1)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_local\\n (NonNegative ((1)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\\n.Hoed/exe/Main.hs:12:260:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the second argument of \\8216prop_view_local\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_local\\n (NonNegative ((1)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_idem gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_idem\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_idem {- generateArgs -} (NonNegative ((1)) ) {- more: [Just 434: Enter (P 433 1),Just 435: Fun (P 433 1)] -} {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 436: Enter (P 435 1),Just 437: Cons 4 \\\"StackSet\\\" (P 435 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:150:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the first argument of \\8216prop_view_idem\\8217, namely\\n \\8216(NonNegative ((1)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_idem\\n (NonNegative ((1)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\\n.Hoed/exe/Main.hs:12:258:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the second argument of \\8216prop_view_idem\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_idem\\n (NonNegative ((1)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_I gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_I\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_I {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 436: Enter (P 435 1),Just 437: Cons 4 \\\"StackSet\\\" (P 435 1)] -} {- generateArgs -} (NonNegative ((1)) ) {- more: [Just 434: Enter (P 433 1),Just 435: Fun (P 433 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:144:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the first argument of \\8216prop_view_I\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_I\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((1)))\\8217\\n\\n.Hoed/exe/Main.hs:12:1510:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the second argument of \\8216prop_view_I\\8217, namely\\n \\8216(NonNegative ((1)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_I\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((1)))\\8217\\n\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_reversible gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_reversible\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_reversible {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 436: Enter (P 435 1),Just 437: Cons 4 \\\"StackSet\\\" (P 435 1)] -} {- generateArgs -} (NonNegative ((1)) ) {- more: [Just 434: Enter (P 433 1),Just 435: Fun (P 433 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:162:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the first argument of \\8216prop_view_reversible\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_reversible\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((1)))\\8217\\n\\n.Hoed/exe/Main.hs:12:1528:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the second argument of \\8216prop_view_reversible\\8217, namely\\n \\8216(NonNegative ((1)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_reversible\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((1)))\\8217\\n\"]: view (NonNegative 1) (StackSet (Screen (Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) 2 1) ((Screen (Workspace (NonNegative 0) _ Nothing) 1 -2) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _) = StackSet (Screen (Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) 2 1) ((Screen (Workspace (NonNegative 0) _ Nothing) 1 -2) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) : (Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _"]+v10 [label="Unassessed: findTag 'd' (StackSet (Screen (Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) 2 1) ((Screen (Workspace (NonNegative 0) _ Nothing) 1 -2) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) : (Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _) = Nothing"]+v9 [label="Unassessed: member 'd' (StackSet (Screen (Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) 2 1) ((Screen (Workspace (NonNegative 0) _ Nothing) 1 -2) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) : (Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _) = False"]+v8 [label="Assisted [InconclusiveProperty \"\\n---\\n\\nApplying property prop_insert_duplicate_weak gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_insert_duplicate_weak\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_insert_duplicate_weak {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 411: Enter (P 410 1),Just 412: Cons 4 \\\"StackSet\\\" (P 410 1)] -} {- generateArgs -} (('d')) {- more: [Just 409: Enter (P 408 1),Just 410: Fun (P 408 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:174:\\n Couldn't match expected type \\8216Char\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the first argument of \\8216prop_insert_duplicate_weak\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_insert_duplicate_weak\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (('d'))\\8217\\n\\n.Hoed/exe/Main.hs:12:1703:\\n Couldn't match type \\8216Char\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: Char\\n In the second argument of \\8216prop_insert_duplicate_weak\\8217, namely\\n \\8216(('d'))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_insert_duplicate_weak\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (('d'))\\8217\\n In a stmt of a 'do' block:\\n print . fromJust . ok . (generate 1 g) . evaluate\\n $ prop_insert_duplicate_weak\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (('d'))\\n\"]: insertUp 'd' (StackSet (Screen (Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) 2 1) ((Screen (Workspace (NonNegative 0) _ Nothing) 1 -2) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) : (Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _) = StackSet (Screen (Workspace (NonNegative 1) _ (Just (Stack 'd' [] \"n\"))) 2 1) ((Screen (Workspace (NonNegative 0) _ Nothing) 1 -2) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) : (Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _"]+v7 [label="Assisted [PassingProperty \"prop_view_current\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_local gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_local\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_local {- generateArgs -} (NonNegative ((0)) ) {- more: [Just 303: Enter (P 302 1),Just 304: Fun (P 302 1)] -} {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('d')) (([])) (([])) ) ) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 305: Enter (P 304 1),Just 306: Cons 4 \\\"StackSet\\\" (P 304 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:152:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the first argument of \\8216prop_view_local\\8217, namely\\n \\8216(NonNegative ((0)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_local\\n (NonNegative ((0)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) (([])))))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\\n.Hoed/exe/Main.hs:12:260:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the second argument of \\8216prop_view_local\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) (([])))))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_local\\n (NonNegative ((0)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) (([])))))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_idem gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_idem\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_idem {- generateArgs -} (NonNegative ((0)) ) {- more: [Just 303: Enter (P 302 1),Just 304: Fun (P 302 1)] -} {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('d')) (([])) (([])) ) ) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 305: Enter (P 304 1),Just 306: Cons 4 \\\"StackSet\\\" (P 304 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:150:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the first argument of \\8216prop_view_idem\\8217, namely\\n \\8216(NonNegative ((0)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_idem\\n (NonNegative ((0)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) (([])))))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\\n.Hoed/exe/Main.hs:12:258:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the second argument of \\8216prop_view_idem\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) (([])))))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_idem\\n (NonNegative ((0)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) (([])))))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_I gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_I\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_I {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('d')) (([])) (([])) ) ) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 305: Enter (P 304 1),Just 306: Cons 4 \\\"StackSet\\\" (P 304 1)] -} {- generateArgs -} (NonNegative ((0)) ) {- more: [Just 303: Enter (P 302 1),Just 304: Fun (P 302 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:144:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the first argument of \\8216prop_view_I\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) (([])))))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_I\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) (([])))))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((0)))\\8217\\n\\n.Hoed/exe/Main.hs:12:1545:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the second argument of \\8216prop_view_I\\8217, namely\\n \\8216(NonNegative ((0)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_I\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) (([])))))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((0)))\\8217\\n\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_reversible gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_reversible\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_reversible {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('d')) (([])) (([])) ) ) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 305: Enter (P 304 1),Just 306: Cons 4 \\\"StackSet\\\" (P 304 1)] -} {- generateArgs -} (NonNegative ((0)) ) {- more: [Just 303: Enter (P 302 1),Just 304: Fun (P 302 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:162:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the first argument of \\8216prop_view_reversible\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) (([])))))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_reversible\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) (([])))))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((0)))\\8217\\n\\n.Hoed/exe/Main.hs:12:1563:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the second argument of \\8216prop_view_reversible\\8217, namely\\n \\8216(NonNegative ((0)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_reversible\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) (([])))))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((0)))\\8217\\n\"]: view (NonNegative 0) (StackSet (Screen (Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) 2 1) ((Screen (Workspace (NonNegative 0) _ (Just (Stack 'd' [] []))) 1 -2) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _) = StackSet (Screen (Workspace (NonNegative 0) _ (Just (Stack 'd' [] []))) 1 -2) ((Screen (Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) 2 1) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _"]+v6 [label="Assisted [PassingProperty \"prop_view_current\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_local gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_local\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_local {- generateArgs -} (NonNegative ((2)) ) {- more: [Just 290: Enter (P 289 1),Just 291: Fun (P 289 1)] -} {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 292: Enter (P 291 1),Just 293: Cons 4 \\\"StackSet\\\" (P 291 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:152:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the first argument of \\8216prop_view_local\\8217, namely\\n \\8216(NonNegative ((2)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_local\\n (NonNegative ((2)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\\n.Hoed/exe/Main.hs:12:260:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the second argument of \\8216prop_view_local\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_local\\n (NonNegative ((2)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_idem gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_idem\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_idem {- generateArgs -} (NonNegative ((2)) ) {- more: [Just 290: Enter (P 289 1),Just 291: Fun (P 289 1)] -} {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 292: Enter (P 291 1),Just 293: Cons 4 \\\"StackSet\\\" (P 291 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:150:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the first argument of \\8216prop_view_idem\\8217, namely\\n \\8216(NonNegative ((2)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_idem\\n (NonNegative ((2)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\\n.Hoed/exe/Main.hs:12:258:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the second argument of \\8216prop_view_idem\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_idem\\n (NonNegative ((2)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_I gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_I\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_I {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 292: Enter (P 291 1),Just 293: Cons 4 \\\"StackSet\\\" (P 291 1)] -} {- generateArgs -} (NonNegative ((2)) ) {- more: [Just 290: Enter (P 289 1),Just 291: Fun (P 289 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:144:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the first argument of \\8216prop_view_I\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_I\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((2)))\\8217\\n\\n.Hoed/exe/Main.hs:12:1510:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the second argument of \\8216prop_view_I\\8217, namely\\n \\8216(NonNegative ((2)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_I\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((2)))\\8217\\n\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_reversible gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_reversible\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_reversible {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 292: Enter (P 291 1),Just 293: Cons 4 \\\"StackSet\\\" (P 291 1)] -} {- generateArgs -} (NonNegative ((2)) ) {- more: [Just 290: Enter (P 289 1),Just 291: Fun (P 289 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:162:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the first argument of \\8216prop_view_reversible\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_reversible\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((2)))\\8217\\n\\n.Hoed/exe/Main.hs:12:1528:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the second argument of \\8216prop_view_reversible\\8217, namely\\n \\8216(NonNegative ((2)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_reversible\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([])))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((2)))\\8217\\n\"]: view (NonNegative 2) (StackSet (Screen (Workspace (NonNegative 0) _ Nothing) 1 -2) ((Screen (Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) 2 1) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _) = StackSet (Screen (Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) 2 1) ((Screen (Workspace (NonNegative 0) _ Nothing) 1 -2) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _"]+v5 [label="Assisted [PassingProperty \"prop_view_current\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_local gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_local\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_local {- generateArgs -} (NonNegative ((2)) ) {- more: [Just 280: Enter (P 279 1),Just 281: Fun (P 279 1)] -} {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('d')) (([])) ((:) (('n')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 282: Enter (P 281 1),Just 283: Cons 4 \\\"StackSet\\\" (P 281 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:152:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the first argument of \\8216prop_view_local\\8217, namely\\n \\8216(NonNegative ((2)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_local\\n (NonNegative ((2)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) ((:) (('n')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\\n.Hoed/exe/Main.hs:12:260:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the second argument of \\8216prop_view_local\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) ((:) (('n')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_local\\n (NonNegative ((2)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) ((:) (('n')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_idem gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_idem\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_idem {- generateArgs -} (NonNegative ((2)) ) {- more: [Just 280: Enter (P 279 1),Just 281: Fun (P 279 1)] -} {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('d')) (([])) ((:) (('n')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 282: Enter (P 281 1),Just 283: Cons 4 \\\"StackSet\\\" (P 281 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:150:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the first argument of \\8216prop_view_idem\\8217, namely\\n \\8216(NonNegative ((2)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_idem\\n (NonNegative ((2)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) ((:) (('n')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\\n.Hoed/exe/Main.hs:12:258:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the second argument of \\8216prop_view_idem\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) ((:) (('n')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_idem\\n (NonNegative ((2)))\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) ((:) (('n')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_I gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_I\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_I {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('d')) (([])) ((:) (('n')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 282: Enter (P 281 1),Just 283: Cons 4 \\\"StackSet\\\" (P 281 1)] -} {- generateArgs -} (NonNegative ((2)) ) {- more: [Just 280: Enter (P 279 1),Just 281: Fun (P 279 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:144:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the first argument of \\8216prop_view_I\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) ((:) (('n')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_I\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) ((:) (('n')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((2)))\\8217\\n\\n.Hoed/exe/Main.hs:12:1690:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the second argument of \\8216prop_view_I\\8217, namely\\n \\8216(NonNegative ((2)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_I\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) ((:) (('n')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((2)))\\8217\\n\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_view_reversible gives inconclusive result:\\n\\nCompilation of {{{\\n-- This file is generated by the Haskell debugger Hoed\\nimport Properties\\nimport qualified Debug.Hoed.Pure as Hoed\\nimport System.Random\\nimport Data.Maybe\\nimport Test.QuickCheck\\nimport XMonad.StackSet\\nimport Test.QuickCheck\\nimport qualified Data.Map as M\\nimport System.Random\\nimport Data.Maybe\\nmain = Hoed.runOstore \\\"prop_view_reversible\\\" $ do g <- newStdGen; print . fromJust . ok . (generate 1 g) . evaluate $ prop_view_reversible {- generateArgs -} (StackSet (Screen (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('d')) (([])) ((:) (('n')) (([])) ) ) ) ) ((2)) ((1)) ) ((:) (Screen (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((1)) ((-2)) ) ((:) (Screen (Workspace (NonNegative ((3)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('v')) (([])) (([])) ) ) ) ((3)) ((-1)) ) ((:) (Screen (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('w')) (([])) ((:) (('i')) (([])) ) ) ) ) ((0)) ((-2)) ) (([])) ) ) ) ((:) (Workspace (NonNegative ((2)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('c')) (([])) ((:) (('z')) (([])) ) ) ) ) ((:) (Workspace (NonNegative ((1)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Just (Stack (('n')) (([])) (([])) ) ) ) ((:) (Workspace (NonNegative ((0)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) ((:) (Workspace (NonNegative ((4)) ) (error \\\"Request of value that was unevaluated in original program.\\\") (Nothing) ) (([])) ) ) ) ) (error \\\"Request of value that was unevaluated in original program.\\\")) {- more: [Just 282: Enter (P 281 1),Just 283: Cons 4 \\\"StackSet\\\" (P 281 1)] -} {- generateArgs -} (NonNegative ((2)) ) {- more: [Just 280: Enter (P 279 1),Just 281: Fun (P 279 1)] -} \\n\\n}}} failed with:\\n[7 of 7] Compiling Main ( .Hoed/exe/Main.hs, .Hoed/exe/Main.o )\\n\\n.Hoed/exe/Main.hs:12:162:\\n Couldn't match expected type \\8216NonNegative Int\\8217\\n with actual type \\8216StackSet\\n (NonNegative Integer) l0 Char Integer Integer\\8217\\n In the first argument of \\8216prop_view_reversible\\8217, namely\\n \\8216(StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) ((:) (('n')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_reversible\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) ((:) (('n')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((2)))\\8217\\n\\n.Hoed/exe/Main.hs:12:1708:\\n Couldn't match type \\8216NonNegative Integer\\8217\\n with \\8216StackSet (NonNegative Int) Int Char Int Int\\8217\\n Expected type: T\\n Actual type: NonNegative Integer\\n In the second argument of \\8216prop_view_reversible\\8217, namely\\n \\8216(NonNegative ((2)))\\8217\\n In the second argument of \\8216($)\\8217, namely\\n \\8216prop_view_reversible\\n (StackSet\\n (Screen\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('d')) (([])) ((:) (('n')) (([]))))))\\n ((2))\\n ((1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((1))\\n ((- 2)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((3)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('v')) (([])) (([])))))\\n ((3))\\n ((- 1)))\\n ((:)\\n (Screen\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('w')) (([])) ((:) (('i')) (([]))))))\\n ((0))\\n ((- 2)))\\n (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((2)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('c')) (([])) ((:) (('z')) (([]))))))\\n ((:)\\n (Workspace\\n (NonNegative ((1)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Just (Stack (('n')) (([])) (([])))))\\n ((:)\\n (Workspace\\n (NonNegative ((0)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n ((:)\\n (Workspace\\n (NonNegative ((4)))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\")\\n (Nothing))\\n (([]))))))\\n (error\\n \\\"Request of value that was unevaluated in original program.\\\"))\\n (NonNegative ((2)))\\8217\\n\"]: view (NonNegative 2) (StackSet (Screen (Workspace (NonNegative 1) _ (Just (Stack 'd' [] \"n\"))) 2 1) ((Screen (Workspace (NonNegative 0) _ Nothing) 1 -2) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) : (Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _) = StackSet (Screen (Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) 2 1) ((Screen (Workspace (NonNegative 0) _ Nothing) 1 -2) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 1) _ (Just (Stack 'd' [] \"n\"))) : (Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) : (Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _"]+v4 [label="Unassessed: findTag 'd' (StackSet (Screen (Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) 2 1) ((Screen (Workspace (NonNegative 0) _ (Just (Stack 'd' _ _))) 1 -2) : _) _ _) = Just (NonNegative 0)"]+v3 [label="Unassessed: shiftWin (NonNegative 1) 'd' (StackSet (Screen (Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) 2 1) ((Screen (Workspace (NonNegative 0) _ (Just (Stack 'd' [] []))) 1 -2) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _) = StackSet (Screen (Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) 2 1) ((Screen (Workspace (NonNegative 0) _ Nothing) 1 -2) : (Screen (Workspace (NonNegative 3) _ (Just (Stack 'v' [] []))) 3 -1) : (Screen (Workspace (NonNegative 4) _ (Just (Stack 'w' [] \"i\"))) 0 -2) : []) ((Workspace (NonNegative 1) _ (Just (Stack 'd' [] \"n\"))) : (Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) : (Workspace (NonNegative 1) _ (Just (Stack 'n' [] []))) : (Workspace (NonNegative 0) _ Nothing) : (Workspace (NonNegative 4) _ Nothing) : []) _"]+v2 [label="Unassessed: findTag 'd' (StackSet (Screen (Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) 2 1) ((Screen (Workspace (NonNegative 0) _ (Just (Stack 'd' _ _))) 1 -2) : _) _ _) = Just _"]+v1 [label="Unassessed: member 'd' (StackSet (Screen (Workspace (NonNegative 2) _ (Just (Stack 'c' [] \"z\"))) 2 1) ((Screen (Workspace (NonNegative 0) _ (Just (Stack 'd' _ _))) 1 -2) : _) _ _) = True"]+v0 [label=root]+v0 -> v1 [label=""]+v1 -> v2 [label=""]+v3 -> v4 [label=""]+v8 -> v9 [label=""]+v9 -> v10 [label=""]+v3 -> v11 [label=""]+v3 -> v6 [label=""]+v3 -> v7 [label=""]+v0 -> v3 [label=""]+v3 -> v5 [label=""]+v3 -> v8 [label=""]+}
+ tests/ref/hoed-tests-Prop-t5.graph view
@@ -0,0 +1,15 @@+diGraph G {+v6 [label="Assisted [InconclusiveProperty \"\\n---\\n\\nApplying property prop_filter_f gives inconclusive result:\\n\\n*** Gave up! Passed only 0 tests.\\n\",InconclusiveProperty \"\\n---\\n\\nApplying property prop_filter_t gives inconclusive result:\\n\\n*** Gave up! Passed only 0 tests.\\n\"]: filter _ [] = []"]+v5 [label="Assisted [InconclusiveProperty \"Simpler tree suggested with complexity 6(current tree has complexity of 35)\"]: filter { \\ 3 -> False } (3 : []) = 3 : []"]+v4 [label="Right: isEven 3 = False"]+v3 [label="Right: isEven 2 = True"]+v2 [label="Assisted [InconclusiveProperty \"Simpler tree suggested with complexity 12(current tree has complexity of 35)\"]: filter { \\ 2 -> True , \\ 3 -> False } (2 : 3 : []) = 3 : []"]+v1 [label="Assisted [InconclusiveProperty \"We found values for the unevaluated expressions in the current statement that falsify\\na property, however the resulting tree is not simpler.\"]: evens (2 : 3 : []) = 3 : []"]+v0 [label=root]+v1 -> v3 [label=""]+v1 -> v4 [label=""]+v0 -> v1 [label=""]+v1 -> v2 [label=""]+v2 -> v5 [label=""]+v5 -> v6 [label=""]+}
+ tests/ref/hoed-tests-Pure-t1.graph view
@@ -0,0 +1,9 @@+diGraph G {+v3 [label="g 2 = 1"]+v2 [label="f 0 = 0"]+v1 [label="f 2 = 1"]+v0 [label="."shape=none]+v1 -> v3 [label=""]+v0 -> v2 [label=""]+v0 -> v1 [label=""]+}
+ tests/ref/hoed-tests-Pure-t2.graph view
@@ -0,0 +1,15 @@+diGraph G {+v6 [label="n 2 = 2"]+v5 [label="n 1 = 1"]+v4 [label="m 2 = 2"]+v3 [label="m 1 = 1"]+v2 [label="l 1 = 1"]+v1 [label="k 1 = 3"]+v0 [label="."shape=none]+v4 -> v6 [label=""]+v3 -> v5 [label=""]+v2 -> v3 [label=""]+v1 -> v4 [label=""]+v1 -> v2 [label=""]+v0 -> v1 [label=""]+}
+ tests/ref/hoed-tests-Pure-t3.graph view
@@ -0,0 +1,13 @@+diGraph G {+v5 [label="insert 2 [] = 2 : []"]+v4 [label="insert 1 ( 2 : []) = 1 : []"]+v3 [label="isort [] = []"]+v2 [label="isort ( 2 : []) = 2 : []"]+v1 [label="isort ( 1 : 2 : []) = 1 : []"]+v0 [label="."shape=none]+v2 -> v3 [label=""]+v2 -> v5 [label=""]+v1 -> v2 [label=""]+v1 -> v4 [label=""]+v0 -> v1 [label=""]+}
+ tests/ref/hoed-tests-Pure-t4.graph view
@@ -0,0 +1,11 @@+diGraph G {+v4 [label="plusOne 3 = 4"]+v3 [label="mod2 4 = 2"]+v2 [label="isEven 4 = False"]+v1 [label="isOdd 3 = False"]+v0 [label="."shape=none]+v2 -> v3 [label=""]+v1 -> v4 [label=""]+v1 -> v2 [label=""]+v0 -> v1 [label=""]+}
+ tests/ref/hoed-tests-Pure-t5.graph view
@@ -0,0 +1,7 @@+diGraph G {+v2 [label="g 3 = 6"]+v1 [label="f (Just 3) = 6"]+v0 [label="."shape=none]+v1 -> v2 [label=""]+v0 -> v1 [label=""]+}
+ tests/ref/hoed-tests-Pure-t6.graph view
@@ -0,0 +1,5 @@+diGraph G {+v1 [label="ends (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step (Step End)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) = True"]+v0 [label="."shape=none]+v0 -> v1 [label=""]+}
+ tests/ref/hoed-tests-Pure-t7.graph view
@@ -0,0 +1,7 @@+diGraph G {+v2 [label="apxy { \\ 4 5 -> 9 } 4 5 = 9"]+v1 [label="ap45 { \\ 4 5 -> 9 } = 9"]+v0 [label="."shape=none]+v1 -> v2 [label=""]+v0 -> v1 [label=""]+}
+ tests/ref/hoed-tests-Stk-DoublingServer.graph view
@@ -0,0 +1,12 @@+diGraph G {+v3 [label="{twotimes 2 = 4, twotimes 3 = 5}+with stack [\"double\"]"]+v2 [label="{server 2 socket = <IO> _, server 1 socket = <IO> _, server 0 _ = <IO> _, }+with stack []"]+v1 [label="{double \"2\" = \"4\", double \"3\" = \"5\", }+with stack []"]+v0 [label=root]+v1 -> v3 [label=""]+v0 -> v2 [label=""]+v0 -> v1 [label=""]+}
+ tests/ref/hoed-tests-Stk-Example1.graph view
@@ -0,0 +1,9 @@+diGraph G {+v2 [label="g 2 = 1+with stack [\"f\"]"]+v1 [label="{f 2 = 1, f 0 = 0, }+with stack []"]+v0 [label=root]+v1 -> v2 [label=""]+v0 -> v1 [label=""]+}
+ tests/ref/hoed-tests-Stk-Example3.graph view
@@ -0,0 +1,21 @@+diGraph G {+v5 [label="n 1 = 1+with stack [\"m\",\"l\",\"k\"]"]+v4 [label="n 2 = 2+with stack [\"m\",\"k\"]"]+v3 [label="m 2 = 2+with stack [\"k\"]"]+v2 [label="k 1 = 3+with stack []"]+v1 [label=root]+v0 [label="{l 1 = 1, m 1 = 1}+with stack [\"k\"]"]+v2 -> v5 [label=""]+v3 -> v0 [label=""]+v2 -> v4 [label=""]+v0 -> v5 [label=""]+v3 -> v4 [label=""]+v2 -> v0 [label=""]+v2 -> v3 [label=""]+v1 -> v2 [label=""]+}
+ tests/ref/hoed-tests-Stk-Example4.graph view
@@ -0,0 +1,6 @@+diGraph G {+v1 [label="main = 42+with stack []"]+v0 [label=root]+v0 -> v1 [label=""]+}
+ tests/ref/hoed-tests-Stk-IndirectRecursion.graph view
@@ -0,0 +1,13 @@+diGraph G {+v3 [label="h 4 = 5+with stack [\"f\"]"]+v2 [label="f 1 = 5+with stack []"]+v1 [label=root]+v0 [label="{g 2 = 5, f 3 = 5}+with stack [\"f\"]"]+v0 -> v3 [label=""]+v2 -> v0 [label=""]+v2 -> v3 [label=""]+v1 -> v2 [label=""]+}
+ tests/ref/hoed-tests-Stk-Insort2.graph view
@@ -0,0 +1,18 @@+diGraph G {+v4 [label="{isort (2 : []) = 2 : [], isort [] = []}+with stack [\"isort\",\"result\"]"]+v3 [label="{insert 1 (2 : []) = 1 : [], insert 2 [] = 2 : []}+with stack [\"isort\",\"result\"]"]+v2 [label="isort (1 : 2 : []) = 1 : []+with stack [\"result\"]"]+v1 [label="result = 1 : []+with stack []"]+v0 [label=root]+v1 -> v4 [label=""]+v1 -> v3 [label=""]+v4 -> v3 [label=""]+v2 -> v3 [label=""]+v2 -> v4 [label=""]+v1 -> v2 [label=""]+v0 -> v1 [label=""]+}