module Debug.TraceCall.Base where

import Data.List

-- | * Data collected during inspecting function calls
data TraceData = TraceData
  { function :: String
  , args     :: [String]
  , context  :: Maybe TraceData
  }

traceToString :: TraceData -> [String]
traceToString (TraceData f as mc) =
  [f ++ " " ++ intercalate " " as] ++ maybe [] traceToString mc

traceResult :: TraceData -> String -> String
traceResult td res =
  case traceToString td of
    []        -> "Trace error"
    [top]     -> "Function call: " ++ top ++ " => " ++ res
    (top:ctx) -> "Function call: " ++ top ++ " => " ++ res ++ "\n In context: " ++ concatMap ("\n  "++) ctx