Hoed-0.1.0.0: examples/TH-hello.hs
{-# LANGUAGE TemplateHaskell, Rank2Types #-}
import Debug.Hoed.Observe
data T = Hello | World
f :: T -> T
f Hello = World
f World = Hello
p :: T -> String
p Hello = "Hello"
p World = "world"
$(observedTypes "f" [[t| T |]])
main = runO . putStrLn $ (p . f') Hello
where f' = $(observe "f") f