packages feed

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)