Hoed-0.2.0: examples/Responsibility.lhs
> import Debug.Hoed
sacc "outer" 1 + (sacc "inner" 2 * x)
> ex1 :: Int -> Int
> ex1 = (observe "outer") (\x -> {-# SCC "outer" #-}
> 1 + (((observe "inner") (\x -> {-# SCC "inner" #-} 2 * x)) x)
> )
(sacc "com" \f g x -> f (g x)) (sacc "add" (+1)) (sacc "mul" (*2))
> ex2 :: Int -> Int
> ex2 = ((observe "com1") (\f g x -> {-# SCC "com1" #-} f (g x)))
> ((observe "add1") ({-# SCC "add1" #-} (+1)))
> ((observe "mul1") ({-# SCC "add1" #-} (*2)))
> ex3 :: Int -> Int
> ex3 = let f = ((observe "add2") ({-# SCC "add2" #-} (+1)))
> g = ((observe "mul2") ({-# SCC "add2" #-} (*2)))
> in ((observe "com2") (\x -> {-# SCC "com2" #-} f (g x)))
> ex4 :: Int -> Int
> ex4 = let f = ((observe "f") ({-# SCC "f" #-} (+1)))
> g = ((observe "g") ({-# SCC "g" #-} (*2)))
> in ((observe "h") ({-# SCC "h" #-} f . g))
> main = runO $ do print (ex1 4)
> print (ex2 4)
> print (ex3 4)
> print (ex4 4)