packages feed

hood 0.3 → 0.3.1

raw patch · 4 files changed

+79/−38 lines, 4 filesdep +hooddep ~basePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: hood

Dependency ranges changed: base

API changes (from Hackage documentation)

+ Debug.Hood.Observe: infixl 9 <<
+ Debug.Hood.Observe: type CDSSet = [CDS]
- Debug.Hood.Observe: class Observable a where observer x c = to (gdmobserver (from x) c) observers label arg = defaultObservers label arg
+ Debug.Hood.Observe: class Observable a
- Debug.Hood.Observe: observer :: Observable a => a -> Parent -> a
+ Debug.Hood.Observe: observer :: (Observable a, Generic a, GObservable (Rep a)) => a -> Parent -> a

Files

CHANGELOG.md view
@@ -1,3 +1,6 @@+## 0.3.1 [2018.01.18]+* Fix the build on GHC 8.4.+ ## 0.3 * `Observable` instances can be derived for `Generic` instances using   `DefaultSignatures` ([MaartenFaddegon](https://github.com/ku-fpg/hood/pull/1))
Debug/Hood/Observe.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}@@ -61,6 +62,7 @@    , debugO         -- IO a -> IO [CDS]   , CDS(..)+  , CDSSet   ) where  {-@@ -97,7 +99,11 @@ -} import Data.Dynamic ( Dynamic ) -import Prelude+import Prelude hiding (+#if MIN_VERSION_base(4,11,0)+                        (<>)+#endif+                      )  infixl 9 << @@ -162,7 +168,7 @@        ; let cdss2 = simplifyCDSSet cdss1        ; let output1 = cdssToOutput cdss2        ; let output2 = commonOutput output1-       ; let ptyout  = pretty 80 (foldr (<>) nil (map renderTop output2))+       ; let ptyout  = pretty 80 $ foldr ((<>) . renderTop) nil output2        ; hPutStrLn stderr ""        ; hPutStrLn stderr ptyout        }@@ -308,7 +314,7 @@          - This used used to group several observer instances together.          -}         observers :: String -> (Observer -> a) -> a-        observers label arg = defaultObservers label arg+        observers = defaultObservers  class GObservable f where         gdmobserver :: f a -> Parent -> f a@@ -354,7 +360,7 @@  -- Products: encode multiple arguments to constructors instance (GObservable a, GObservable b) => GObservable (a :*: b) where-        gdmobserver (a :*: b) cxt = (gdmobserver a cxt) :*: (gdmobserver b cxt)+        gdmobserver (a :*: b) cxt = gdmobserver a cxt :*: gdmobserver b cxt         gdmObserveChildren (a :*: b) = do a'  <- gdmObserveChildren a                                           b'  <- gdmObserveChildren b                                           return (a' :*: b')@@ -368,14 +374,14 @@  gthunk :: (GObservable f) => f a -> ObserverM (f a) gthunk a = ObserverM $ \ parent port ->-                ( gdmobserver_ a (Parent+                ( gdmobserver_ a Parent                                 { observeParent = parent                                 , observePort   = port-                                })+                                }                 , port+1 )  gdmobserver_ :: (GObservable f) => f a -> Parent -> f a-gdmobserver_ a context = gsendEnterPacket a context+gdmobserver_ = gsendEnterPacket  gsendEnterPacket :: (GObservable f) => f a -> Parent -> f a gsendEnterPacket r context = unsafeWithUniq $ \ node ->@@ -395,16 +401,16 @@                = unsafeWithUniq $ \ subnode ->                  do { sendEvent subnode (Parent node 0)                                         (Observe sublabel)-                    ; return (observer_ a (Parent+                    ; return (observer_ a Parent                         { observeParent = subnode                         , observePort   = 0-                        }))+                        })                     }         ; return (observer_ (fn (O observe'))-                       (Parent+                       Parent                         { observeParent = node                         , observePort   = 0-                        }))+                        })         } defaultFnObservers :: (Observable a, Observable b)                       => String -> (Observer -> a -> b) -> a -> b@@ -414,16 +420,16 @@                = unsafeWithUniq $ \ subnode ->                  do { sendEvent subnode (Parent node 0)                                         (Observe sublabel)-                    ; return (observer_ a (Parent+                    ; return (observer_ a Parent                         { observeParent = subnode                         , observePort   = 0-                        }))+                        })                     }         ; return (observer_ (fn (O observe'))-                       (Parent+                       Parent                         { observeParent = node                         , observePort   = 0-                        }) arg)+                        } arg)         }  {-@@ -455,10 +461,10 @@  thunk :: (Observable a) => a -> ObserverM a thunk a = ObserverM $ \ parent port ->-                ( observer_ a (Parent+                ( observer_ a Parent                                 { observeParent = parent                                 , observePort   = port-                                })+                                }                 , port+1 )  (<<) :: (Observable a) => ObserverM (a -> b) -> a -> ObserverM b@@ -488,7 +494,7 @@ -- {-# NOINLINE observe #-} observe :: (Observable a) => String -> a -> a-observe name a = generateContext name a+observe = generateContext  {- This gets called before observer, allowing us to mark  - we are entering a, before we do case analysis on@@ -497,7 +503,7 @@  {-# NOINLINE observer_ #-} observer_ :: (Observable a) => a -> Parent -> a-observer_ a context = sendEnterPacket a context+observer_ = sendEnterPacket  data Parent = Parent         { observeParent :: !Int -- my parent@@ -510,17 +516,19 @@  unsafeWithUniq :: (Int -> IO a) -> a unsafeWithUniq fn-  = unsafePerformIO $ do { node <- getUniq-                         ; fn node+  = unsafePerformIO $ do { node <- readUniq+                         ; r <- fn node+                         ; incrementUniq node+                         ; return r                          }  generateContext :: (Observable a) => String -> a -> a generateContext label orig = unsafeWithUniq $ \ node ->      do { sendEvent node (Parent 0 0) (Observe label)-        ; return (observer_ orig (Parent+        ; return (observer_ orig Parent                         { observeParent = node                         , observePort   = 0-                        })+                        }                   )         } @@ -595,6 +603,7 @@            }  -- local+{-# NOINLINE events #-} events :: IORef [Event] events = unsafePerformIO $ newIORef badEvents @@ -620,17 +629,11 @@ initUniq :: IO () initUniq = writeIORef uniq 1 -getUniq :: IO Int-getUniq-    = do { takeMVar uniqSem-         ; n <- readIORef uniq-         ; writeIORef uniq $! (n + 1)-         ; putMVar uniqSem ()-         ; return n-         }+incrementUniq :: Int -> IO ()+incrementUniq n = writeIORef uniq $! (n + 1) -peepUniq :: IO Int-peepUniq = readIORef uniq+readUniq :: IO Int+readUniq = readIORef uniq  -- locals {-# NOINLINE uniq #-}@@ -682,7 +685,7 @@ eventsToCDS :: [Event] -> CDSSet eventsToCDS pairs = getChild 0 0    where-     res i = (!) out_arr i+     res = (!) out_arr       bnds = (0, length pairs) @@ -716,7 +719,7 @@  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@@ -780,7 +783,7 @@ findFn' other rest = ([],[other]) : rest  renderTops []   = nil-renderTops tops = line <> foldr (<>) nil (map renderTop tops)+renderTops tops = line <> foldr ((<>) . renderTop ) nil tops  renderTop :: Output -> Doc renderTop (OutLabel str set extras) =
hood.cabal view
@@ -1,5 +1,5 @@ Name:                hood-Version:             0.3+Version:             0.3.1 Synopsis:            Debugging by observing in place Description:         Hood debugger, based on the idea of observing functions and structures as they are evaluated. Category:            Debug, Trace@@ -8,7 +8,7 @@ Author:              Andy Gill Maintainer:          Andy Gill <andygill@ku.edu> Copyright:           (c) 2000 Andy Gill, (c) 2010-2015 University of Kansas, (c) 2013-2015 Maarten Faddegon-Homepage:            http://www.ittc.ku.edu/csdl/fpg/Hood+Homepage:            http://ku-fpg.github.io/software/hood bug-reports:         https://github.com/ku-fpg/hood/issues Stability:           alpha build-type:          Simple@@ -17,12 +17,21 @@                    , GHC == 7.6.3                    , GHC == 7.8.4                    , GHC == 7.10.3+                   , GHC == 8.0.2+                   , GHC == 8.2.2+                   , GHC == 8.4.1 extra-source-files:  CHANGELOG.md, README.md  Library   Build-Depends: base >= 4.5 && < 5, array, FPretty, ghc-prim   Exposed-modules:       Debug.Hood.Observe++Test-Suite hood-test+  Type:                exitcode-stdio-1.0+  Hs-Source-Dirs:      test+  Main-Is:             test.hs+  Build-Depends:       base, ghc-prim, hood  source-repository head     type:     git
+ test/test.hs view
@@ -0,0 +1,26 @@+#!/usr/bin/env stack+{-# LANGUAGE DeriveGeneric #-}+-- stack --resolver lts-8.4 runghc --package hood+-- Minimum program to reproduce https://github.com/ku-fpg/hood/issues/5++import           Debug.Hood.Observe+import           GHC.Generics+++data Hoge =+  Hoge+    { hoge1 :: Int+    , hoge2 :: String+    } deriving Generic++instance Observable Hoge+++main :: IO ()+main = runO $ print $ f undefined+++f :: Hoge -> Bool+f = observe "f" f'+f' :: Hoge -> Bool+f' h@(Hoge _h1 _h2) = error "ERROR"