haxl-2.5.1.1: Haxl/Core/CallGraph.hs
{-
Copyright (c) Meta Platforms, Inc. and affiliates.
All rights reserved.
This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.
-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE CPP #-}
module Haxl.Core.CallGraph where
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as Map
#if __GLASGOW_HASKELL__ < 804
import Data.Monoid
#endif
import Data.Text (Text)
import qualified Data.Text as Text
type ModuleName = Text
-- | An unqualified function
type Function = Text
-- | A qualified function
data QualFunction = QualFunction ModuleName Function deriving (Eq, Ord)
instance Show QualFunction where
show (QualFunction mn nm) = Text.unpack $ mn <> Text.pack "." <> nm
-- | Represents an edge between a parent function which calls a child function
-- in the call graph
type FunctionCall = (QualFunction, QualFunction)
-- | An edge list which represents the dependencies between function calls
type CallGraph = ([FunctionCall], Map QualFunction Text)
-- | Used as the root of all function calls
mainFunction :: QualFunction
mainFunction = QualFunction "MAIN" "main"
emptyCallGraph :: CallGraph
emptyCallGraph = ([], Map.empty)