import Data.Char import Debug.Trace bar :: Char -> Int -- the definition you're trying to find bar c = foo (chr (ord c + 1)) {-# NOINLINE intermediate #-} intermediate :: Char -> Int intermediate c = trace (c : "hi") (bar c) foo :: Char -> Int foo c = intermediate c main :: IO () main = print (foo 'a')