{-# LANGUAGE CPP #-}
module HieDb.Compat (
nodeInfo'
, Unit
, unitString
, stringToUnit
, moduleUnit
, unhelpfulSpanFS
) where
import Compat.HieTypes
import Module
#if __GLASGOW_HASKELL__ >= 900
import GHC.Types.SrcLoc
import Compat.HieUtils
import qualified Data.Map as M
import qualified Data.Set as S
nodeInfo' :: HieAST TypeIndex -> NodeInfo TypeIndex
nodeInfo' = M.foldl' combineNodeInfo' emptyNodeInfo . getSourcedNodeInfo . sourcedNodeInfo
combineNodeInfo' :: Ord a => NodeInfo a -> NodeInfo a -> NodeInfo a
(NodeInfo as ai ad) `combineNodeInfo'` (NodeInfo bs bi bd) =
NodeInfo (S.union as bs) (mergeSorted ai bi) (M.unionWith (<>) ad bd)
where
mergeSorted :: Ord a => [a] -> [a] -> [a]
mergeSorted la@(a:as) lb@(b:bs) = case compare a b of
LT -> a : mergeSorted as lb
EQ -> a : mergeSorted as bs
GT -> b : mergeSorted la bs
mergeSorted as [] = as
mergeSorted [] bs = bs
#else
import qualified FastString as FS
nodeInfo' :: HieAST TypeIndex -> NodeInfo TypeIndex
nodeInfo' :: HieAST TypeIndex -> NodeInfo TypeIndex
nodeInfo' = HieAST TypeIndex -> NodeInfo TypeIndex
forall a. HieAST a -> NodeInfo a
nodeInfo
type Unit = UnitId
unitString :: Unit -> String
unitString :: Unit -> String
unitString = Unit -> String
unitIdString
stringToUnit :: String -> Unit
stringToUnit :: String -> Unit
stringToUnit = String -> Unit
stringToUnitId
moduleUnit :: Module -> Unit
moduleUnit :: Module -> Unit
moduleUnit = Module -> Unit
moduleUnitId
unhelpfulSpanFS :: FS.FastString -> FS.FastString
unhelpfulSpanFS :: FastString -> FastString
unhelpfulSpanFS = FastString -> FastString
forall a. a -> a
id
#endif
#if __GLASGOW_HASKELL__ >= 900
#else
#endif