Hoed-0.2.0: examples/Example3.lhs
> {-# LANGUAGE TemplateHaskell, Rank2Types #-}
> import Debug.Hoed
> $(observedTypes "k" [])
> $(observedTypes "l" [])
> $(observedTypes "m" [])
> $(observedTypes "n" [])
> main = runO $ print (k 1)
> k :: Int -> Int
> k x = $(observeTempl "k") k' x
> k' x = {-# SCC "k" #-} k'' x
> k'' x = (l x) + (m $ x + 1)
> l :: Int -> Int
> l x = $(observeTempl "l") l' x
> l' x = {-# SCC "l" #-} m x
> m :: Int -> Int
> m x = $(observeTempl "m") m' x
> m' x = {-# SCC "m" #-} n x
> n :: Int -> Int
> n x = $(observeTempl "n") n' x
> n' x = {-# SCC "n" #-} x