diff options
| author | Yuchen Pei <hi@ypei.me> | 2022-08-18 23:48:58 +1000 | 
|---|---|---|
| committer | Yuchen Pei <hi@ypei.me> | 2022-08-18 23:48:58 +1000 | 
| commit | c60f10c839c833b8babc0118227459072b2d7283 (patch) | |
| tree | 87f507fc54bcbd002918b2b21253e97dcb6dcc8c /test | |
| parent | e0c11910befd96e9dfa98cd393e7d8799376c9af (diff) | |
removing CPP from test, thus formatting
Diffstat (limited to 'test')
| -rw-r--r-- | test/Main.hs | 2195 | 
1 files changed, 1086 insertions, 1109 deletions
diff --git a/test/Main.hs b/test/Main.hs index a1e774a..9c009e0 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-}  {-# LANGUAGE OverloadedStrings #-}  {-# LANGUAGE RecordWildCards #-}  {-# LANGUAGE ScopedTypeVariables #-} @@ -8,31 +7,31 @@  module Main where -import Control.Exception (try) -import Control.Monad.Logger (runLoggingT) -import qualified Data.ByteString as BS -import qualified Data.Generics.Uniplate.Data as U -import qualified Data.HashMap.Strict as HM -import qualified Data.IntMap as IM -import qualified Data.IntervalMap.Strict as IVM -import qualified Data.Set as S -import qualified Data.Text as T -import qualified Data.Text.Encoding as TE -import qualified Data.Vector as V -import Data.Version (makeVersion) -import HaskellCodeExplorer.AST.TypecheckedSource (removeOverlappingInterval) -import HaskellCodeExplorer.PackageInfo -import HaskellCodeExplorer.Preprocessor -import HaskellCodeExplorer.Types -import qualified HaskellCodeExplorer.Types as HCE -import System.Directory -  ( findExecutable -  , getCurrentDirectory -  , withCurrentDirectory -  ) -import System.FilePath ((</>)) -import System.Process (readProcess) -import Test.Hspec +import           Control.Exception              ( try ) +import           Control.Monad.Logger           ( runLoggingT ) +import qualified Data.ByteString               as BS +import qualified Data.Generics.Uniplate.Data   as U +import qualified Data.HashMap.Strict           as HM +import qualified Data.IntMap                   as IM +import qualified Data.IntervalMap.Strict       as IVM +import qualified Data.Set                      as S +import qualified Data.Text                     as T +import qualified Data.Text.Encoding            as TE +import qualified Data.Vector                   as V +import           Data.Version                   ( makeVersion ) +import           HaskellCodeExplorer.AST.TypecheckedSource +                                                ( removeOverlappingInterval ) +import           HaskellCodeExplorer.PackageInfo +import           HaskellCodeExplorer.Preprocessor +import           HaskellCodeExplorer.Types +import qualified HaskellCodeExplorer.Types     as HCE +import           System.Directory               ( findExecutable +                                                , getCurrentDirectory +                                                , withCurrentDirectory +                                                ) +import           System.FilePath                ( (</>) ) +import           System.Process                 ( readProcess ) +import           Test.Hspec  testPackageDir :: FilePath  testPackageDir = "test/test-package" @@ -50,233 +49,266 @@ packageInfoSpec :: FilePath -> Spec  packageInfoSpec currentDir = do    eitherPackageInfo <- runIO $ buildAndIndexTestPackage currentDir    case eitherPackageInfo of -    Right HCE.PackageInfo{id=pkgId, ..} -> do +    Right HCE.PackageInfo { id = pkgId, ..} -> do        describe "createPackageInfo" $ do -        it "returns valid package id" $ -          pkgId `shouldBe` -          PackageId "test-package" (makeVersion [0, 1, 0, 0]) +        it "returns valid package id" $ pkgId `shouldBe` PackageId +          "test-package" +          (makeVersion [0, 1, 0, 0])          it "returns valid list of module paths" $ do -          let paths = -                HM.fromList -                  [ ( HaskellModulePath {getHaskellModulePath = "app/Main.hs"} -                    , ()) -                  , ( HaskellModulePath {getHaskellModulePath = "src/Types.hs"} -                    , ()) -                  , ( HaskellModulePath {getHaskellModulePath = "test/Spec.hs"} -                    , ()) -                  , ( HaskellModulePath {getHaskellModulePath = "src/Lib.hs"} -                    , ()) -                  ] -          (HM.map (const ())) -            moduleMap `shouldBe` -            paths +          let +            paths = HM.fromList +              [ (HaskellModulePath { getHaskellModulePath = "app/Main.hs" }, ()) +              , ( HaskellModulePath { getHaskellModulePath = "src/Types.hs" } +                , () +                ) +              , ( HaskellModulePath { getHaskellModulePath = "test/Spec.hs" } +                , () +                ) +              , (HaskellModulePath { getHaskellModulePath = "src/Lib.hs" }, ()) +              ] +          (HM.map (const ())) moduleMap `shouldBe` paths          it "returns valid list of module names" $ do -          let names = -                HM.fromList -                  [ ( HaskellModuleName {getHaskellModuleName = "Types"} -                    , HM.fromList -                        [ ( ComponentId {getComponentId = "lib"} -                          , HaskellModulePath -                              {getHaskellModulePath = "src/Types.hs"}) -                        ]) -                  , ( HaskellModuleName {getHaskellModuleName = "Main"} -                    , HM.fromList -                        [ ( ComponentId -                              {getComponentId = "exe-test-package-exe"} -                          , HaskellModulePath -                              {getHaskellModulePath = "app/Main.hs"}) -                        , ( ComponentId -                              {getComponentId = "test-test-package-test"} -                          , HaskellModulePath -                              {getHaskellModulePath = "test/Spec.hs"}) -                        ]) -                  , ( HaskellModuleName {getHaskellModuleName = "Lib"} -                    , HM.fromList -                        [ ( ComponentId {getComponentId = "lib"} -                          , HaskellModulePath -                              {getHaskellModulePath = "src/Lib.hs"}) -                        ]) +          let +            names = HM.fromList +              [ ( HaskellModuleName { getHaskellModuleName = "Types" } +                , HM.fromList +                  [ ( ComponentId { getComponentId = "lib" } +                    , HaskellModulePath { getHaskellModulePath = "src/Types.hs" +                                        } +                    ) +                  ] +                ) +              , ( HaskellModuleName { getHaskellModuleName = "Main" } +                , HM.fromList +                  [ ( ComponentId { getComponentId = "exe-test-package-exe" } +                    , HaskellModulePath { getHaskellModulePath = "app/Main.hs" } +                    ) +                  , ( ComponentId { getComponentId = "test-test-package-test" } +                    , HaskellModulePath { getHaskellModulePath = "test/Spec.hs" +                                        } +                    )                    ] -          moduleNameMap `shouldBe` -            names +                ) +              , ( HaskellModuleName { getHaskellModuleName = "Lib" } +                , HM.fromList +                  [ ( ComponentId { getComponentId = "lib" } +                    , HaskellModulePath { getHaskellModulePath = "src/Lib.hs" } +                    ) +                  ] +                ) +              ] +          moduleNameMap `shouldBe` names        let mbModuleInfo = -            HM.lookup -              (HCE.HaskellModulePath "src/Lib.hs") -              moduleMap +            HM.lookup (HCE.HaskellModulePath "src/Lib.hs") moduleMap        case mbModuleInfo of          Just modInfo -> moduleInfoSpec modInfo -        Nothing -> return () +        Nothing      -> return ()      Left e -> runIO $ putStrLn e >> return ()  moduleInfoSpec :: ModuleInfo -> Spec -moduleInfoSpec HCE.ModuleInfo{id = _, ..} = -  describe "createModuleInfo" $ do -    it "returns valid module name" $ -      name `shouldBe` -      HCE.HaskellModuleName "Lib" -    it "returns valid list of declarations " $ -      declarations `shouldBe` testDeclarations -    it "returns valid source code " $ do -      let sourceCodeLines = -            V.fromList -              [ "module Lib" -              , "    ( someFunc" -              , "    ) where" -              , "" -              , "import Types(Test(..))" -              , "" -              , "-- | someFunc documentation" -              , "someFunc :: IO ()" -              , "someFunc = putStrLn \"someFunc\"" -              , "" -              , "-- | mkTest documentation" -              , "mkTest :: Int -> Test" -              , "mkTest i = Test i" -              , "" -              ] -      source `shouldBe` sourceCodeLines -    it "returns valid map of expressions" $ -      exprInfoMap `shouldBe` testExprInfoMap -#if MIN_VERSION_GLASGOW_HASKELL(8,2,2,0) -    it "returns valid map of identifiers " $ -      let removeLocationInfo :: HCE.LocationInfo -> HCE.LocationInfo -          removeLocationInfo _ = HCE.UnknownLocation "" -          removePackageVersionFromExternalId :: HCE.ExternalId -> HCE.ExternalId -          removePackageVersionFromExternalId extId@(HCE.ExternalId textId) = case T.splitOn "|" textId of -            pId:rest -> case T.splitOn "-" pId of -              packageIdParts@(_:_) -> HCE.ExternalId $ T.intercalate "|" ((T.intercalate "-" (init packageIdParts)) : rest) +moduleInfoSpec HCE.ModuleInfo { id = _, ..} = describe "createModuleInfo" $ do +  it "returns valid module name" $ name `shouldBe` HCE.HaskellModuleName "Lib" +  it "returns valid list of declarations " +    $          declarations +    `shouldBe` testDeclarations +  it "returns valid source code " $ do +    let sourceCodeLines = V.fromList +          [ "module Lib" +          , "    ( someFunc" +          , "    ) where" +          , "" +          , "import Types(Test(..))" +          , "" +          , "-- | someFunc documentation" +          , "someFunc :: IO ()" +          , "someFunc = putStrLn \"someFunc\"" +          , "" +          , "-- | mkTest documentation" +          , "mkTest :: Int -> Test" +          , "mkTest i = Test i" +          , "" +          ] +    source `shouldBe` sourceCodeLines +  it "returns valid map of expressions" $ exprInfoMap `shouldBe` testExprInfoMap +  it "returns valid map of identifiers " +    $ let +        removeLocationInfo :: HCE.LocationInfo -> HCE.LocationInfo +        removeLocationInfo _ = HCE.UnknownLocation "" +        removePackageVersionFromExternalId :: HCE.ExternalId -> HCE.ExternalId +        removePackageVersionFromExternalId extId@(HCE.ExternalId textId) = +          case T.splitOn "|" textId of +            pId : rest -> case T.splitOn "-" pId of +              packageIdParts@(_ : _) -> HCE.ExternalId $ T.intercalate +                "|" +                ((T.intercalate "-" (init packageIdParts)) : rest)                _ -> extId -            _ ->  extId -          cleanup :: HCE.IdentifierInfoMap -> HCE.IdentifierInfoMap -          cleanup = U.transformBi removeLocationInfo . U.transformBi removePackageVersionFromExternalId -       in +            _ -> extId +        cleanup :: HCE.IdentifierInfoMap -> HCE.IdentifierInfoMap +        cleanup = U.transformBi removeLocationInfo +          . U.transformBi removePackageVersionFromExternalId +      in          cleanup idInfoMap `shouldBe` cleanup testIdInfoMap -#endif -    it "returns valid map of identifier occurrences" $ -      idOccMap `shouldBe` testIdOccMap +  it "returns valid map of identifier occurrences" +    $          idOccMap +    `shouldBe` testIdOccMap  stackYamlArg :: [String] -#if MIN_VERSION_GLASGOW_HASKELL(8,6,5,0)  stackYamlArg = [] -#elif MIN_VERSION_GLASGOW_HASKELL(8,6,4,0) -stackYamlArg = ["--stack-yaml=stack-8.6.4.yaml"] -#elif MIN_VERSION_GLASGOW_HASKELL(8,6,3,0) -stackYamlArg = ["--stack-yaml=stack-8.6.3.yaml"] -#elif MIN_VERSION_GLASGOW_HASKELL(8,4,4,0) -stackYamlArg = ["--stack-yaml=stack-8.4.4.yaml"] -#elif MIN_VERSION_GLASGOW_HASKELL(8,4,3,0) -stackYamlArg = ["--stack-yaml=stack-8.4.3.yaml" ] -#elif MIN_VERSION_GLASGOW_HASKELL(8,2,2,0) -stackYamlArg = ["--stack-yaml=stack-8.2.2.yaml" ] -#else -stackYamlArg = ["--stack-yaml=stack-8.0.2.yaml" ] -#endif -buildAndIndexTestPackage :: -     FilePath -> IO (Either String (PackageInfo ModuleInfo)) +buildAndIndexTestPackage +  :: FilePath -> IO (Either String (PackageInfo ModuleInfo))  buildAndIndexTestPackage currentDir = do    mbStackExecutable <- findExecutable "stack"    case mbStackExecutable of      Just stackExecutable -> do -      let removeEndOfLine str -            | null str = str -            | otherwise = init str +      let removeEndOfLine str | null str  = str +                              | otherwise = init str        (eitherDistDir :: Either IOError String) <- -        try . -        fmap removeEndOfLine . -        readProcess stackExecutable (["path", "--dist-dir"] ++ stackYamlArg) $ -        "" +        try +        . fmap removeEndOfLine +        . readProcess stackExecutable (["path", "--dist-dir"] ++ stackYamlArg) +        $ ""        case eitherDistDir of          Right distDir -> do            packageInfo <-              let testPackageDirectoryPath = currentDir </> testPackageDir -             in withCurrentDirectory testPackageDirectoryPath $ do -                  _ <- -                    readProcess -                      stackExecutable -                      (["build", "--test","--force-dirty"] ++ stackYamlArg) -                      "" +            in  withCurrentDirectory testPackageDirectoryPath $ do +                  _ <- readProcess +                    stackExecutable +                    (["build", "--test", "--force-dirty"] ++ stackYamlArg) +                    ""                    runLoggingT -                    (createPackageInfo -                       testPackageDirectoryPath -                       (Just distDir) -                       HCE.BeforePreprocessing -                       [] -                       []) +                    (createPackageInfo testPackageDirectoryPath +                                       (Just distDir) +                                       HCE.BeforePreprocessing +                                       [] +                                       [] +                    )                      (\_ _ _ _ -> return ())            return . Right $ packageInfo          Left ex -> return . Left $ show ex      Nothing -> -      return . Left $ -      "Cannot find stack executable. Stack executable is required to build the test package." +      return +        . Left +        $ "Cannot find stack executable. Stack executable is required to build the test package."  sourceCodeTransformationSpec :: FilePath -> Spec  sourceCodeTransformationSpec currentDir = do    sourceCodeAfterPreprocessor <-      runIO $ BS.readFile $ currentDir </> "test/data/FileAfterPreprocessor.hs" -  let sourceCodeTransformation = -        fst $ -        createSourceCodeTransformation -          (HaskellModulePath "File.hs") -          (TE.decodeUtf8 sourceCodeAfterPreprocessor) -          (TE.decodeUtf8 sourceCodeAfterPreprocessor) +  let sourceCodeTransformation = fst $ createSourceCodeTransformation +        (HaskellModulePath "File.hs") +        (TE.decodeUtf8 sourceCodeAfterPreprocessor) +        (TE.decodeUtf8 sourceCodeAfterPreprocessor)    describe "createSourceCodeTransformation" $ do      it "returns valid list of pragmas" $ do -      let pragmas = -            S.fromList -              [ LinePragma (HaskellFilePath "File1.hs") 8 1 -              , LinePragma (HaskellFilePath "File1.hs") 11 14 -              , LinePragma (HaskellFilePath "File2.hs") 12 1 -              , LinePragma (HaskellFilePath "File1.hs") 18 15 -              , LinePragma (HaskellFilePath "File.hs") 21 9 -              , LinePragma (HaskellFilePath "File.hs") 23 18 -              , LinePragma (HaskellFilePath "File3.hs") 26 1 -              , LinePragma (HaskellFilePath "File.hs") 30 21 -              ] +      let pragmas = S.fromList +            [ LinePragma (HaskellFilePath "File1.hs") 8  1 +            , LinePragma (HaskellFilePath "File1.hs") 11 14 +            , LinePragma (HaskellFilePath "File2.hs") 12 1 +            , LinePragma (HaskellFilePath "File1.hs") 18 15 +            , LinePragma (HaskellFilePath "File.hs")  21 9 +            , LinePragma (HaskellFilePath "File.hs")  23 18 +            , LinePragma (HaskellFilePath "File3.hs") 26 1 +            , LinePragma (HaskellFilePath "File.hs")  30 21 +            ]        linePragmas sourceCodeTransformation `shouldBe` pragmas -    it "returns valid file index" $ -      let index = -            HM.fromList -              [ ( HaskellFilePath {getHaskellFilePath = "File1.hs"} -                , S.fromList -                    [ FileLocation {lineStart = 1, lineEnd = 2, offset = 8} -                    , FileLocation {lineStart = 15, lineEnd = 16, offset = 4} -                    ]) -              , ( HaskellFilePath {getHaskellFilePath = "File2.hs"} -                , S.fromList -                    [FileLocation {lineStart = 1, lineEnd = 5, offset = 12}]) -              , ( HaskellFilePath {getHaskellFilePath = "File3.hs"} -                , S.fromList -                    [FileLocation {lineStart = 1, lineEnd = 3, offset = 26}]) -              , ( HaskellFilePath {getHaskellFilePath = "File.hs"} -                , S.fromList -                    [ FileLocation {lineStart = 1, lineEnd = 8, offset = 0} -                    , FileLocation {lineStart = 9, lineEnd = 9, offset = 13} -                    , FileLocation {lineStart = 18, lineEnd = 19, offset = 6} -                    , FileLocation {lineStart = 21, lineEnd = 21, offset = 10} -                    ]) -              ] -       in fileIndex sourceCodeTransformation `shouldBe` index +    it "returns valid file index" +      $ let +          index = HM.fromList +            [ ( HaskellFilePath { getHaskellFilePath = "File1.hs" } +              , S.fromList +                [ FileLocation { lineStart = 1, lineEnd = 2, offset = 8 } +                , FileLocation { lineStart = 15, lineEnd = 16, offset = 4 } +                ] +              ) +            , ( HaskellFilePath { getHaskellFilePath = "File2.hs" } +              , S.fromList +                [FileLocation { lineStart = 1, lineEnd = 5, offset = 12 }] +              ) +            , ( HaskellFilePath { getHaskellFilePath = "File3.hs" } +              , S.fromList +                [FileLocation { lineStart = 1, lineEnd = 3, offset = 26 }] +              ) +            , ( HaskellFilePath { getHaskellFilePath = "File.hs" } +              , S.fromList +                [ FileLocation { lineStart = 1, lineEnd = 8, offset = 0 } +                , FileLocation { lineStart = 9, lineEnd = 9, offset = 13 } +                , FileLocation { lineStart = 18, lineEnd = 19, offset = 6 } +                , FileLocation { lineStart = 21, lineEnd = 21, offset = 10 } +                ] +              ) +            ] +        in  fileIndex sourceCodeTransformation `shouldBe` index    describe "fromOriginalLineNumber" $ do -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File.hs", 1) (Right 1) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File.hs", 4) (Right 4) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File1.hs", 1) (Right 9) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File1.hs", 2) (Right 10) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File2.hs", 1) (Right 13) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File2.hs", 3) (Right 15) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File2.hs", 5) (Right 17) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File1.hs", 15) (Right 19) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File1.hs", 16) (Right 20) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File3.hs", 1) (Right 27) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File3.hs", 2) (Right 28) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File3.hs", 3) (Right 29) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File.hs", 9) (Right 22) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File.hs", 18) (Right 24) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File.hs", 19) (Right 25) -    test fromOriginalLineNumber sourceCodeTransformation (HaskellFilePath "File.hs", 21) (Right 31) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File.hs", 1) +         (Right 1) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File.hs", 4) +         (Right 4) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File1.hs", 1) +         (Right 9) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File1.hs", 2) +         (Right 10) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File2.hs", 1) +         (Right 13) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File2.hs", 3) +         (Right 15) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File2.hs", 5) +         (Right 17) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File1.hs", 15) +         (Right 19) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File1.hs", 16) +         (Right 20) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File3.hs", 1) +         (Right 27) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File3.hs", 2) +         (Right 28) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File3.hs", 3) +         (Right 29) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File.hs", 9) +         (Right 22) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File.hs", 18) +         (Right 24) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File.hs", 19) +         (Right 25) +    test fromOriginalLineNumber +         sourceCodeTransformation +         (HaskellFilePath "File.hs", 21) +         (Right 31) -test :: -     forall a t t1. (Show t1, Show t, Show a, Eq a) +test +  :: forall a t t1 +   . (Show t1, Show t, Show a, Eq a)    => (t1 -> t -> a)    -> t1    -> t @@ -286,913 +318,858 @@ test fun arg1 arg2 result =    it (show arg1 ++ " " ++ show arg2) $ fun arg1 arg2 `shouldBe` result  tokenizeSpec :: Spec -tokenizeSpec = -  describe "tokenize" $ do -    test tokenize "" ([] :: [((Int, Int), String)]) [] -    test -      tokenize -      "--comment" -      ([] :: [((Int, Int), String)]) -      [("--comment", (1, 10), Nothing)] -    test -      tokenize -      ("abcd" :: T.Text) -      [((1, 5), "abcdIdentifier")] -      [("abcd", (1, 5), Just "abcdIdentifier")] -    test -      tokenize -      ("data Test" :: T.Text) -      [((6, 10), "TestIdentifier")] -      [("data ", (1, 6), Nothing), ("Test", (6, 10), Just "TestIdentifier")] -    test -      tokenize -      ("abc = xyz" :: T.Text) -      [((1, 4), "abcIdentifier"), ((7, 10), "xyzIdentifier")] -      [ ("abc", (1, 4), Just "abcIdentifier") -      , (" = ", (4, 7), Nothing) -      , ("xyz", (7, 10), Just "xyzIdentifier") -      ] -    test -      tokenize -      ("abc = xyz --comment" :: T.Text) -      [((1, 4), "abcIdentifier"), ((7, 10), "xyzIdentifier")] -      [ ("abc", (1, 4), Just "abcIdentifier") -      , (" = ", (4, 7), Nothing) -      , ("xyz", (7, 10), Just "xyzIdentifier") -      , (" --comment", (10, 20), Nothing) -      ] -    test -      tokenize -      ("   abc = xyz --comment" :: T.Text) -      [((4, 7), "abcIdentifier"), ((10, 13), "xyzIdentifier")] -      [ ("   ", (1, 4), Nothing) -      , ("abc", (4, 7), Just "abcIdentifier") -      , (" = ", (7, 10), Nothing) -      , ("xyz", (10, 13), Just "xyzIdentifier") -      , (" --comment", (13, 23), Nothing) -      ] +tokenizeSpec = describe "tokenize" $ do +  test tokenize "" ([] :: [((Int, Int), String)]) [] +  test tokenize +       "--comment" +       ([] :: [((Int, Int), String)]) +       [("--comment", (1, 10), Nothing)] +  test tokenize +       ("abcd" :: T.Text) +       [((1, 5), "abcdIdentifier")] +       [("abcd", (1, 5), Just "abcdIdentifier")] +  test tokenize +       ("data Test" :: T.Text) +       [((6, 10), "TestIdentifier")] +       [("data ", (1, 6), Nothing), ("Test", (6, 10), Just "TestIdentifier")] +  test +    tokenize +    ("abc = xyz" :: T.Text) +    [((1, 4), "abcIdentifier"), ((7, 10), "xyzIdentifier")] +    [ ("abc", (1, 4) , Just "abcIdentifier") +    , (" = ", (4, 7) , Nothing) +    , ("xyz", (7, 10), Just "xyzIdentifier") +    ] +  test +    tokenize +    ("abc = xyz --comment" :: T.Text) +    [((1, 4), "abcIdentifier"), ((7, 10), "xyzIdentifier")] +    [ ("abc"       , (1, 4)  , Just "abcIdentifier") +    , (" = "       , (4, 7)  , Nothing) +    , ("xyz"       , (7, 10) , Just "xyzIdentifier") +    , (" --comment", (10, 20), Nothing) +    ] +  test +    tokenize +    ("   abc = xyz --comment" :: T.Text) +    [((4, 7), "abcIdentifier"), ((10, 13), "xyzIdentifier")] +    [ ("   "       , (1, 4)  , Nothing) +    , ("abc"       , (4, 7)  , Just "abcIdentifier") +    , (" = "       , (7, 10) , Nothing) +    , ("xyz"       , (10, 13), Just "xyzIdentifier") +    , (" --comment", (13, 23), Nothing) +    ]  removeOverlappingIntervalSpec :: Spec -removeOverlappingIntervalSpec = -  describe "removeOverlappingInterval" $ do -    test removeOverlappingInterval [((1, 2), "a")] [] [((1, 2), "a")] -    test -      removeOverlappingInterval -      [((3, 4), "b")] -      [((1, 2), "a")] -      [((1, 2), "a"), ((3, 4), "b")] -    test -      removeOverlappingInterval -      [((2, 3), "b")] -      [((1, 5), "a")] -      [((2, 3), "b")] -    test -      removeOverlappingInterval -      [((1, 5), "b")] -      [((2, 3), "a")] -      [((2, 3), "a")] -    test -      removeOverlappingInterval -      [((1, 5), "b")] -      [((2, 7), "a")] -      [((1, 5), "b")] -    test -      removeOverlappingInterval -      [((1, 3), "b")] -      [((1, 3), "a")] -      [((1, 3), "a")] +removeOverlappingIntervalSpec = describe "removeOverlappingInterval" $ do +  test removeOverlappingInterval [((1, 2), "a")] [] [((1, 2), "a")] +  test removeOverlappingInterval +       [((3, 4), "b")] +       [((1, 2), "a")] +       [((1, 2), "a"), ((3, 4), "b")] +  test removeOverlappingInterval [((2, 3), "b")] [((1, 5), "a")] [((2, 3), "b")] +  test removeOverlappingInterval [((1, 5), "b")] [((2, 3), "a")] [((2, 3), "a")] +  test removeOverlappingInterval [((1, 5), "b")] [((2, 7), "a")] [((1, 5), "b")] +  test removeOverlappingInterval [((1, 3), "b")] [((1, 3), "a")] [((1, 3), "a")]  testDeclarations :: [Declaration]  testDeclarations =    [ Declaration -      { sort = ValD -      , name = "someFunc" -      , declType = -          Just -            (Type -               { components = -                   [ TyCon {internalId = HCE.InternalId "0", name = "IO"} -                   , Text " ()" -                   ] -               , componentsExpanded = Nothing -               }) -      , isExported = True -      , lineNumber = 9 -      } +    { sort       = ValD +    , name       = "someFunc" +    , declType   = Just +                     (Type +                       { components = [ TyCon { internalId = HCE.InternalId "0" +                                              , name       = "IO" +                                              } +                                      , Text " ()" +                                      ] +                       , componentsExpanded = Nothing +                       } +                     ) +    , isExported = True +    , lineNumber = 9 +    }    , Declaration -      { sort = ValD -      , name = "mkTest" -      , declType = -          Just -            (Type -               { components = -                   [ TyCon {internalId = HCE.InternalId "9", name = "Int"} -                   , Text " -> " -                   , TyCon {internalId = HCE.InternalId "1", name = "Test"} -                   ] -               , componentsExpanded = Nothing -               }) -      , isExported = False -      , lineNumber = 13 -      } +    { sort       = ValD +    , name       = "mkTest" +    , declType   = Just +      (Type +        { components         = +          [ TyCon { internalId = HCE.InternalId "9", name = "Int" } +          , Text " -> " +          , TyCon { internalId = HCE.InternalId "1", name = "Test" } +          ] +        , componentsExpanded = Nothing +        } +      ) +    , isExported = False +    , lineNumber = 13 +    }    ] -testExprInfoMap :: IVM.IntervalMap (Int,Int) HCE.ExpressionInfo -testExprInfoMap = -  IVM.fromList -    [ ( IVM.OpenInterval (9, 12) (9, 31) -      , ExpressionInfo -          { description = "HsApp" -          , exprType = -              Just -                (Type -                   { components = -                       [ TyCon {internalId = InternalId {getInternalId = "0"}, name = "IO"} -                       , Text " ()" -                       ] -                   , componentsExpanded = Nothing -                   }) -          }) -    , ( IVM.OpenInterval (13, 12) (13, 18) -      , ExpressionInfo -          { description = "HsApp" -          , exprType = -              Just -                (Type -                   { components = -                       [ TyCon -                           {internalId = InternalId {getInternalId = "1"}, name = "Test"} -                       ] -                   , componentsExpanded = Nothing -                   }) -          }) -    ] +testExprInfoMap :: IVM.IntervalMap (Int, Int) HCE.ExpressionInfo +testExprInfoMap = IVM.fromList +  [ ( IVM.OpenInterval (9, 12) (9, 31) +    , ExpressionInfo +      { description = "HsApp" +      , exprType    = Just +                        (Type +                          { components         = [ TyCon +                                                   { internalId = InternalId +                                                                    { getInternalId = "0" +                                                                    } +                                                   , name       = "IO" +                                                   } +                                                 , Text " ()" +                                                 ] +                          , componentsExpanded = Nothing +                          } +                        ) +      } +    ) +  , ( IVM.OpenInterval (13, 12) (13, 18) +    , ExpressionInfo +      { description = "HsApp" +      , exprType    = Just +        (Type +          { components         = +            [ TyCon { internalId = InternalId { getInternalId = "1" } +                    , name       = "Test" +                    } +            ] +          , componentsExpanded = Nothing +          } +        ) +      } +    ) +  ]  testIdOccMap :: IM.IntMap [((Int, Int), IdentifierOccurrence)] -testIdOccMap = -  IM.fromList -    [ ( 2 -      , [ ( (7, 15) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "2"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "3"}) -              , isBinder = False -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "IE" -              , sort = ValueId -              }) -        ]) -    , ( 5 -      , [ ( (8, 13) -          , IdentifierOccurrence -              { internalId = Nothing -              , internalIdFromRenamedSource = Nothing -              , isBinder = False -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "ImportDecl" -              , sort = -                  ModuleId -                    (ExactLocation -                       { packageId = -                           PackageId -                             { name = "test-package" -                             , version = makeVersion [0, 1, 0, 0] -                             } -                       , modulePath = -                           HaskellModulePath -                             {getHaskellModulePath = "src/Types.hs"} -                       , moduleName = -                           HaskellModuleName {getHaskellModuleName = "Types"} -                       , startLine = 1 -                       , endLine = 1 -                       , startColumn = 1 -                       , endColumn = 1 -                       }) -              }) -        , ( (14, 18) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "1"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "1"}) -              , isBinder = False -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "IE" -              , sort = TypeId -              }) -        ]) -    , ( 8 -      , [ ( (1, 9) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "2"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "3"}) -              , isBinder = False -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "TypeSig" -              , sort = ValueId -              }) -        , ( (13, 15) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "0"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "0"}) -              , isBinder = False -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "HsTyVar" -              , sort = TypeId -              }) -        , ( (16, 18) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "4"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "4"}) -              , isBinder = False -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "HsTupleTy" -              , sort = TypeId -              }) -        ]) -    , ( 9 -      , [ ( (1, 9) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "2"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "3"}) -              , isBinder = True -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "Match" -              , sort = ValueId -              }) -        , ( (12, 20) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "5"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "5"}) -              , isBinder = False -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "HsVar" -              , sort = ValueId -              }) -        , ( (21, 31) -          , IdentifierOccurrence -              { internalId = Nothing -              , internalIdFromRenamedSource = Nothing -              , isBinder = False -              , instanceResolution = Nothing -              , idOccType = -                  Just -                    (Type -                       { components = -                           [ Text "[" -                           , TyCon -                               { internalId = InternalId {getInternalId = "6"} -                               , name = "Char" -                               } -                           , Text "]" -                           ] -                       , componentsExpanded = Nothing -                       }) -              , typeArguments = Nothing -              , description = "HsLit" -              , sort = ValueId -              }) -        ]) -    , ( 12 -      , [ ( (1, 7) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "7"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "8"}) -              , isBinder = False -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "TypeSig" -              , sort = ValueId -              }) -        , ( (11, 14) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "9"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "9"}) -              , isBinder = False -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "HsTyVar" -              , sort = TypeId -              }) -        , ( (18, 22) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "1"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "1"}) -              , isBinder = False -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "HsTyVar" -              , sort = TypeId -              }) -        ]) -    , ( 13 -      , [ ( (1, 7) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "7"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "8"}) -              , isBinder = True -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "Match" -              , sort = ValueId -              }) -        , ( (8, 9) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "10"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "11"}) -              , isBinder = True -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "VarPat" -              , sort = ValueId -              }) -        , ( (12, 16) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "12"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "13"}) -              , isBinder = False -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "HsVar" -              , sort = ValueId -              }) -        , ( (17, 18) -          , IdentifierOccurrence -              { internalId = Just (InternalId {getInternalId = "10"}) -              , internalIdFromRenamedSource = -                  Just (InternalId {getInternalId = "11"}) -              , isBinder = False -              , instanceResolution = Nothing -              , idOccType = Nothing -              , typeArguments = Nothing -              , description = "HsVar" -              , sort = ValueId -              }) -        ]) -    ] +testIdOccMap = IM.fromList +  [ ( 2 +    , [ ( (7, 15) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "2" }) +          , internalIdFromRenamedSource = Just +                                            (InternalId { getInternalId = "3" }) +          , isBinder                    = False +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "IE" +          , sort                        = ValueId +          } +        ) +      ] +    ) +  , ( 5 +    , [ ( (8, 13) +        , IdentifierOccurrence +          { internalId                  = Nothing +          , internalIdFromRenamedSource = Nothing +          , isBinder                    = False +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "ImportDecl" +          , sort                        = ModuleId +            (ExactLocation +              { packageId   = PackageId { name    = "test-package" +                                        , version = makeVersion [0, 1, 0, 0] +                                        } +              , modulePath  = HaskellModulePath +                                { getHaskellModulePath = "src/Types.hs" +                                } +              , moduleName  = HaskellModuleName { getHaskellModuleName = "Types" +                                                } +              , startLine   = 1 +              , endLine     = 1 +              , startColumn = 1 +              , endColumn   = 1 +              } +            ) +          } +        ) +      , ( (14, 18) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "1" }) +          , internalIdFromRenamedSource = Just +                                            (InternalId { getInternalId = "1" }) +          , isBinder                    = False +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "IE" +          , sort                        = TypeId +          } +        ) +      ] +    ) +  , ( 8 +    , [ ( (1, 9) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "2" }) +          , internalIdFromRenamedSource = Just +                                            (InternalId { getInternalId = "3" }) +          , isBinder                    = False +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "TypeSig" +          , sort                        = ValueId +          } +        ) +      , ( (13, 15) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "0" }) +          , internalIdFromRenamedSource = Just +                                            (InternalId { getInternalId = "0" }) +          , isBinder                    = False +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "HsTyVar" +          , sort                        = TypeId +          } +        ) +      , ( (16, 18) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "4" }) +          , internalIdFromRenamedSource = Just +                                            (InternalId { getInternalId = "4" }) +          , isBinder                    = False +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "HsTupleTy" +          , sort                        = TypeId +          } +        ) +      ] +    ) +  , ( 9 +    , [ ( (1, 9) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "2" }) +          , internalIdFromRenamedSource = Just +                                            (InternalId { getInternalId = "3" }) +          , isBinder                    = True +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "Match" +          , sort                        = ValueId +          } +        ) +      , ( (12, 20) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "5" }) +          , internalIdFromRenamedSource = Just +                                            (InternalId { getInternalId = "5" }) +          , isBinder                    = False +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "HsVar" +          , sort                        = ValueId +          } +        ) +      , ( (21, 31) +        , IdentifierOccurrence +          { internalId                  = Nothing +          , internalIdFromRenamedSource = Nothing +          , isBinder                    = False +          , instanceResolution          = Nothing +          , idOccType                   = Just +            (Type +              { components         = [ Text "[" +                                     , TyCon +                                       { internalId = InternalId { getInternalId = "6" } +                                       , name = "Char" +                                       } +                                     , Text "]" +                                     ] +              , componentsExpanded = Nothing +              } +            ) +          , typeArguments               = Nothing +          , description                 = "HsLit" +          , sort                        = ValueId +          } +        ) +      ] +    ) +  , ( 12 +    , [ ( (1, 7) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "7" }) +          , internalIdFromRenamedSource = Just +                                            (InternalId { getInternalId = "8" }) +          , isBinder                    = False +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "TypeSig" +          , sort                        = ValueId +          } +        ) +      , ( (11, 14) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "9" }) +          , internalIdFromRenamedSource = Just +                                            (InternalId { getInternalId = "9" }) +          , isBinder                    = False +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "HsTyVar" +          , sort                        = TypeId +          } +        ) +      , ( (18, 22) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "1" }) +          , internalIdFromRenamedSource = Just +                                            (InternalId { getInternalId = "1" }) +          , isBinder                    = False +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "HsTyVar" +          , sort                        = TypeId +          } +        ) +      ] +    ) +  , ( 13 +    , [ ( (1, 7) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "7" }) +          , internalIdFromRenamedSource = Just +                                            (InternalId { getInternalId = "8" }) +          , isBinder                    = True +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "Match" +          , sort                        = ValueId +          } +        ) +      , ( (8, 9) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "10" }) +          , internalIdFromRenamedSource = Just +            (InternalId { getInternalId = "11" }) +          , isBinder                    = True +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "VarPat" +          , sort                        = ValueId +          } +        ) +      , ( (12, 16) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "12" }) +          , internalIdFromRenamedSource = Just +            (InternalId { getInternalId = "13" }) +          , isBinder                    = False +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "HsVar" +          , sort                        = ValueId +          } +        ) +      , ( (17, 18) +        , IdentifierOccurrence +          { internalId = Just (InternalId { getInternalId = "10" }) +          , internalIdFromRenamedSource = Just +            (InternalId { getInternalId = "11" }) +          , isBinder                    = False +          , instanceResolution          = Nothing +          , idOccType                   = Nothing +          , typeArguments               = Nothing +          , description                 = "HsVar" +          , sort                        = ValueId +          } +        ) +      ] +    ) +  ]  testIdInfoMap :: HM.HashMap InternalId IdentifierInfo -testIdInfoMap = -  HM.fromList -    [ ( InternalId {getInternalId = "7"} -      , IdentifierInfo -          { sort = External -          , occName = OccName {getOccName = "mkTest"} -          , demangledOccName = "mkTest" -          , nameSpace = VarName -          , locationInfo = -              ExactLocation -                { packageId = -                    PackageId -                      { name = "test-package" -                      , version = makeVersion [0, 1, 0, 0] -                      } -                , modulePath = -                    HaskellModulePath {getHaskellModulePath = "src/Lib.hs"} -                , moduleName = HaskellModuleName {getHaskellModuleName = "Lib"} -                , startLine = 13 -                , endLine = 13 -                , startColumn = 1 -                , endColumn = 7 -                } -          , idType = -              Type -                { components = -                    [ TyCon -                        { internalId = InternalId {getInternalId = "9"} -                        , name = "Int" -                        } -                    , Text " -> " -                    , TyCon -                        { internalId = InternalId {getInternalId = "1"} -                        , name = "Test" -                        } -                    ] -                , componentsExpanded = Nothing -                } -          , details = Just VanillaId -          , doc = Just "<p><span>mkTest documentation</span></p>" -          , internalId = InternalId {getInternalId = "7"} -          , externalId = -              Just -                (ExternalId -                   {getExternalId = "test-package-0.1.0.0|Lib|Val|mkTest"}) -          , isExported = False -          }) -    , ( InternalId {getInternalId = "14"} -      , IdentifierInfo -          { sort = External -          , occName = OccName {getOccName = "TYPE"} -          , demangledOccName = "TYPE" -          , nameSpace = TcClsName -          , locationInfo = -              ApproximateLocation -                { packageId = -                    PackageId -                      { name = "ghc-prim" -                      , version = makeVersion [0, 5, 1, 1] -                      } -                , moduleName = -                    HaskellModuleName {getHaskellModuleName = "GHC.Prim"} -                , entity = Typ -                , name = "TYPE" -                , haddockAnchorId = Just "TYPE" -                , componentId = ComponentId {getComponentId = "lib"} -                } -          , idType = -              Type -                { components = -                    [ TyCon -                        { internalId = InternalId {getInternalId = "15"} -                        , name = "RuntimeRep" -                        } -                    , Text " -> *" -                    ] -                , componentsExpanded = Nothing -                } -          , details = Nothing -          , doc = Nothing -          , internalId = InternalId {getInternalId = "14"} -          , externalId = -              Just -                (ExternalId -                   {getExternalId = "ghc-prim-0.5.1.1|GHC.Prim|Typ|TYPE"}) -          , isExported = False -          }) -    , ( InternalId {getInternalId = "0"} -      , IdentifierInfo -          { sort = External -          , occName = OccName {getOccName = "IO"} -          , demangledOccName = "IO" -          , nameSpace = TcClsName -          , locationInfo = -              ApproximateLocation -                { packageId = -                    PackageId -                      { name = "ghc-prim" -                      , version = makeVersion [0, 5, 1, 1] -                      } -                , moduleName = -                    HaskellModuleName {getHaskellModuleName = "GHC.Types"} -                , entity = Typ -                , name = "IO" -                , haddockAnchorId = Just "IO" -                , componentId = ComponentId {getComponentId = "lib"} -                } -          , idType = -              Type {components = [Text "* -> *"], componentsExpanded = Nothing} -          , details = Nothing -          , doc = Nothing -          , internalId = InternalId {getInternalId = "0"} -          , externalId = -              Just -                (ExternalId -                   {getExternalId = "ghc-prim-0.5.1.1|GHC.Types|Typ|IO"}) -          , isExported = False -          }) -    , ( InternalId {getInternalId = "12"} -      , IdentifierInfo -          { sort = External -          , occName = OccName {getOccName = "Test"} -          , demangledOccName = "Test" -          , nameSpace = DataName -          , locationInfo = -              ExactLocation -                { packageId = -                    PackageId -                      { name = "test-package" -                      , version = makeVersion [0, 1, 0, 0] -                      } -                , modulePath = -                    HaskellModulePath {getHaskellModulePath = "src/Types.hs"} -                , moduleName = -                    HaskellModuleName {getHaskellModuleName = "Types"} -                , startLine = 5 -                , endLine = 5 -                , startColumn = 13 -                , endColumn = 21 -                } -          , idType = -              Type -                { components = -                    [ TyCon -                        { internalId = InternalId {getInternalId = "9"} -                        , name = "Int" -                        } -                    , Text " -> " -                    , TyCon -                        { internalId = InternalId {getInternalId = "1"} -                        , name = "Test" -                        } -                    ] -                , componentsExpanded = Nothing -                } -          , details = Just DataConWorkId -          , doc = Nothing -          , internalId = InternalId {getInternalId = "12"} -          , externalId = -              Just -                (ExternalId -                   {getExternalId = "test-package-0.1.0.0|Types|Val|Test"}) -          , isExported = False -          }) -    , ( InternalId {getInternalId = "17"} -      , IdentifierInfo -          { sort = External -          , occName = OccName {getOccName = "[]"} -          , demangledOccName = "[]" -          , nameSpace = TcClsName -          , locationInfo = -              ApproximateLocation -                { packageId = -                    PackageId -                      { name = "ghc-prim" -                      , version = makeVersion [0, 5, 1, 1] -                      } -                , moduleName = -                    HaskellModuleName {getHaskellModuleName = "GHC.Types"} -                , entity = Typ -                , name = "[]" -                , haddockAnchorId = Just "-91--93-" -                , componentId = ComponentId {getComponentId = "lib"} -                } -          , idType = -              Type {components = [Text "* -> *"], componentsExpanded = Nothing} -          , details = Nothing -          , doc = Nothing -          , internalId = InternalId {getInternalId = "17"} -          , externalId = -              Just -                (ExternalId -                   {getExternalId = "ghc-prim-0.5.1.1|GHC.Types|Typ|[]"}) -          , isExported = False -          }) -    , ( InternalId {getInternalId = "1"} -      , IdentifierInfo -          { sort = External -          , occName = OccName {getOccName = "Test"} -          , demangledOccName = "Test" -          , nameSpace = TcClsName -          , locationInfo = -              ExactLocation -                { packageId = -                    PackageId -                      { name = "test-package" -                      , version = makeVersion [0, 1, 0, 0] -                      } -                , modulePath = -                    HaskellModulePath {getHaskellModulePath = "src/Types.hs"} -                , moduleName = -                    HaskellModuleName {getHaskellModuleName = "Types"} -                , startLine = 5 -                , endLine = 5 -                , startColumn = 1 -                , endColumn = 21 -                } -          , idType = -              Type {components = [Text "*"], componentsExpanded = Nothing} -          , details = Nothing -          , doc = Nothing -          , internalId = InternalId {getInternalId = "1"} -          , externalId = -              Just -                (ExternalId -                   {getExternalId = "test-package-0.1.0.0|Types|Typ|Test"}) -          , isExported = False -          }) -    , ( InternalId {getInternalId = "18"} -      , IdentifierInfo -          { sort = External -          , occName = OccName {getOccName = "LiftedRep"} -          , demangledOccName = "LiftedRep" -          , nameSpace = DataName -          , locationInfo = -              ApproximateLocation -                { packageId = -                    PackageId -                      { name = "ghc-prim" -                      , version = makeVersion [0, 5, 1, 1] -                      } -                , moduleName = -                    HaskellModuleName {getHaskellModuleName = "GHC.Types"} -                , entity = Val -                , name = "LiftedRep" -                , haddockAnchorId = Just "LiftedRep" -                , componentId = ComponentId {getComponentId = "lib"} -                } -          , idType = -              Type -                { components = -                    [ TyCon -                        { internalId = InternalId {getInternalId = "15"} -                        , name = "RuntimeRep" -                        } -                    ] -                , componentsExpanded = Nothing -                } -          , details = Nothing -          , doc = Nothing -          , internalId = InternalId {getInternalId = "18"} -          , externalId = -              Just -                (ExternalId -                   {getExternalId = "ghc-prim-0.5.1.1|GHC.Types|Val|LiftedRep"}) -          , isExported = False -          }) -    , ( InternalId {getInternalId = "4"} -      , IdentifierInfo -          { sort = External -          , occName = OccName {getOccName = "()"} -          , demangledOccName = "()" -          , nameSpace = TcClsName -          , locationInfo = -              ApproximateLocation -                { packageId = -                    PackageId -                      { name = "ghc-prim" -                      , version = makeVersion [0, 5, 1, 1] -                      } -                , moduleName = -                    HaskellModuleName {getHaskellModuleName = "GHC.Tuple"} -                , entity = Typ -                , name = "()" -                , haddockAnchorId = Just "-40--41-" -                , componentId = ComponentId {getComponentId = "lib"} -                } -          , idType = -              Type {components = [Text "*"], componentsExpanded = Nothing} -          , details = Nothing -          , doc = Nothing -          , internalId = InternalId {getInternalId = "4"} -          , externalId = -              Just -                (ExternalId -                   {getExternalId = "ghc-prim-0.5.1.1|GHC.Tuple|Typ|()"}) -          , isExported = False -          }) -    , ( InternalId {getInternalId = "16"} -      , IdentifierInfo -          { sort = External -          , occName = OccName {getOccName = "String"} -          , demangledOccName = "String" -          , nameSpace = TcClsName -          , locationInfo = -              ApproximateLocation -                { packageId = -                    PackageId -                      { name = "base" -                      , version = makeVersion [4, 10, 1, 0] -                      } -                , moduleName = -                    HaskellModuleName {getHaskellModuleName = "GHC.Base"} -                , entity = Typ -                , name = "String" -                , haddockAnchorId = Just "String" -                , componentId = ComponentId {getComponentId = "lib"} -                } -          , idType = -              Type {components = [Text "*"], componentsExpanded = Nothing} -          , details = Nothing -          , doc = Nothing -          , internalId = InternalId {getInternalId = "16"} -          , externalId = -              Just -                (ExternalId -                   {getExternalId = "base-4.10.1.0|GHC.Base|Typ|String"}) -          , isExported = False -          }) -    , ( InternalId {getInternalId = "2"} -      , IdentifierInfo -          { sort = External -          , occName = OccName {getOccName = "someFunc"} -          , demangledOccName = "someFunc" -          , nameSpace = VarName -          , locationInfo = -              ExactLocation -                { packageId = -                    PackageId -                      { name = "test-package" -                      , version = makeVersion [0, 1, 0, 0] -                      } -                , modulePath = -                    HaskellModulePath {getHaskellModulePath = "src/Lib.hs"} -                , moduleName = HaskellModuleName {getHaskellModuleName = "Lib"} -                , startLine = 9 -                , endLine = 9 -                , startColumn = 1 -                , endColumn = 9 -                } -          , idType = -              Type -                { components = -                    [ TyCon -                        { internalId = InternalId {getInternalId = "0"} -                        , name = "IO" -                        } -                    , Text " ()" -                    ] -                , componentsExpanded = Nothing -                } -          , details = Just VanillaId -          , doc = Just "<p><span>someFunc documentation</span></p>" -          , internalId = InternalId {getInternalId = "2"} -          , externalId = -              Just -                (ExternalId -                   {getExternalId = "test-package-0.1.0.0|Lib|Val|someFunc"}) -          , isExported = True -          }) -    , ( InternalId {getInternalId = "5"} -      , IdentifierInfo -          { sort = External -          , occName = OccName {getOccName = "putStrLn"} -          , demangledOccName = "putStrLn" -          , nameSpace = VarName -          , locationInfo = -              ApproximateLocation -                { packageId = -                    PackageId -                      { name = "base" -                      , version = makeVersion [4, 10, 1, 0] -                      } -                , moduleName = -                    HaskellModuleName {getHaskellModuleName = "System.IO"} -                , entity = Val -                , name = "putStrLn" -                , haddockAnchorId = Just "putStrLn" -                , componentId = ComponentId {getComponentId = "lib"} -                } -          , idType = -              Type -                { components = -                    [ TyCon -                        { internalId = InternalId {getInternalId = "16"} -                        , name = "String" -                        } -                    , Text " -> " -                    , TyCon -                        { internalId = InternalId {getInternalId = "0"} -                        , name = "IO" -                        } -                    , Text " ()" -                    ] -                , componentsExpanded = -                    Just -                      [ Text "[" -                      , TyCon -                          { internalId = InternalId {getInternalId = "6"} -                          , name = "Char" -                          } -                      , Text "] -> " -                      , TyCon -                          { internalId = InternalId {getInternalId = "0"} -                          , name = "IO" -                          } -                      , Text " ()" -                      ] -                } -          , details = Just VanillaId -          , doc = Nothing -          , internalId = InternalId {getInternalId = "5"} -          , externalId = -              Just -                (ExternalId -                   {getExternalId = "base-4.10.1.0|System.IO|Val|putStrLn"}) -          , isExported = False -          }) -    , ( InternalId {getInternalId = "6"} -      , IdentifierInfo -          { sort = External -          , occName = OccName {getOccName = "Char"} -          , demangledOccName = "Char" -          , nameSpace = TcClsName -          , locationInfo = -              ApproximateLocation -                { packageId = -                    PackageId -                      { name = "ghc-prim" -                      , version = makeVersion [0, 5, 1, 1] -                      } -                , moduleName = -                    HaskellModuleName {getHaskellModuleName = "GHC.Types"} -                , entity = Typ -                , name = "Char" -                , haddockAnchorId = Just "Char" -                , componentId = ComponentId {getComponentId = "lib"} -                } -          , idType = -              Type {components = [Text "*"], componentsExpanded = Nothing} -          , details = Nothing -          , doc = Nothing -          , internalId = InternalId {getInternalId = "6"} -          , externalId = -              Just -                (ExternalId -                   {getExternalId = "ghc-prim-0.5.1.1|GHC.Types|Typ|Char"}) -          , isExported = False -          }) -    , ( InternalId {getInternalId = "9"} -      , IdentifierInfo -          { sort = External -          , occName = OccName {getOccName = "Int"} -          , demangledOccName = "Int" -          , nameSpace = TcClsName -          , locationInfo = -              ApproximateLocation -                { packageId = -                    PackageId -                      { name = "ghc-prim" -                      , version = makeVersion [0, 5, 1, 1] -                      } -                , moduleName = -                    HaskellModuleName {getHaskellModuleName = "GHC.Types"} -                , entity = Typ -                , name = "Int" -                , haddockAnchorId = Just "Int" -                , componentId = ComponentId {getComponentId = "lib"} -                } -          , idType = -              Type {components = [Text "*"], componentsExpanded = Nothing} -          , details = Nothing -          , doc = Nothing -          , internalId = InternalId {getInternalId = "9"} -          , externalId = -              Just -                (ExternalId -                   {getExternalId = "ghc-prim-0.5.1.1|GHC.Types|Typ|Int"}) -          , isExported = False -          }) -    , ( InternalId {getInternalId = "10"} -      , IdentifierInfo -          { sort = Internal -          , occName = OccName {getOccName = "i"} -          , demangledOccName = "i" -          , nameSpace = VarName -          , locationInfo = -              ExactLocation -                { packageId = -                    PackageId -                      { name = "test-package" -                      , version = makeVersion [0, 1, 0, 0] -                      } -                , modulePath = -                    HaskellModulePath {getHaskellModulePath = "src/Lib.hs"} -                , moduleName = HaskellModuleName {getHaskellModuleName = ""} -                , startLine = 13 -                , endLine = 13 -                , startColumn = 8 -                , endColumn = 9 -                } -          , idType = -              Type -                { components = -                    [ TyCon -                        { internalId = InternalId {getInternalId = "9"} -                        , name = "Int" -                        } -                    ] -                , componentsExpanded = Nothing -                } -          , details = Just VanillaId -          , doc = Nothing -          , internalId = InternalId {getInternalId = "10"} -          , externalId = Nothing -          , isExported = False -          }) -    ] - - +testIdInfoMap = HM.fromList +  [ ( InternalId { getInternalId = "7" } +    , IdentifierInfo +      { sort             = External +      , occName          = OccName { getOccName = "mkTest" } +      , demangledOccName = "mkTest" +      , nameSpace        = VarName +      , locationInfo     = ExactLocation +        { packageId   = PackageId { name    = "test-package" +                                  , version = makeVersion [0, 1, 0, 0] +                                  } +        , modulePath = HaskellModulePath { getHaskellModulePath = "src/Lib.hs" } +        , moduleName  = HaskellModuleName { getHaskellModuleName = "Lib" } +        , startLine   = 13 +        , endLine     = 13 +        , startColumn = 1 +        , endColumn   = 7 +        } +      , idType           = Type +        { components         = +          [ TyCon { internalId = InternalId { getInternalId = "9" } +                  , name       = "Int" +                  } +          , Text " -> " +          , TyCon { internalId = InternalId { getInternalId = "1" } +                  , name       = "Test" +                  } +          ] +        , componentsExpanded = Nothing +        } +      , details          = Just VanillaId +      , doc              = Just "<p><span>mkTest documentation</span></p>" +      , internalId       = InternalId { getInternalId = "7" } +      , externalId       = Just +        (ExternalId { getExternalId = "test-package-0.1.0.0|Lib|Val|mkTest" }) +      , isExported       = False +      } +    ) +  , ( InternalId { getInternalId = "14" } +    , IdentifierInfo +      { sort             = External +      , occName          = OccName { getOccName = "TYPE" } +      , demangledOccName = "TYPE" +      , nameSpace        = TcClsName +      , locationInfo     = ApproximateLocation +                             { packageId       = PackageId +                                                   { name = "ghc-prim" +                                                   , version = makeVersion [0, 5, 1, 1] +                                                   } +                             , moduleName      = HaskellModuleName +                                                   { getHaskellModuleName = "GHC.Prim" +                                                   } +                             , entity          = Typ +                             , name            = "TYPE" +                             , haddockAnchorId = Just "TYPE" +                             , componentId = ComponentId { getComponentId = "lib" } +                             } +      , idType           = Type +                             { components         = [ TyCon +                                                      { internalId = InternalId +                                                                       { getInternalId = "15" +                                                                       } +                                                      , name = "RuntimeRep" +                                                      } +                                                    , Text " -> *" +                                                    ] +                             , componentsExpanded = Nothing +                             } +      , details          = Nothing +      , doc              = Nothing +      , internalId       = InternalId { getInternalId = "14" } +      , externalId       = Just +        (ExternalId { getExternalId = "ghc-prim-0.5.1.1|GHC.Prim|Typ|TYPE" }) +      , isExported       = False +      } +    ) +  , ( InternalId { getInternalId = "0" } +    , IdentifierInfo +      { sort             = External +      , occName          = OccName { getOccName = "IO" } +      , demangledOccName = "IO" +      , nameSpace        = TcClsName +      , locationInfo     = ApproximateLocation +                             { packageId       = PackageId +                                                   { name = "ghc-prim" +                                                   , version = makeVersion [0, 5, 1, 1] +                                                   } +                             , moduleName      = HaskellModuleName +                                                   { getHaskellModuleName = "GHC.Types" +                                                   } +                             , entity          = Typ +                             , name            = "IO" +                             , haddockAnchorId = Just "IO" +                             , componentId = ComponentId { getComponentId = "lib" } +                             } +      , idType           = Type { components         = [Text "* -> *"] +                                , componentsExpanded = Nothing +                                } +      , details          = Nothing +      , doc              = Nothing +      , internalId       = InternalId { getInternalId = "0" } +      , externalId       = Just +        (ExternalId { getExternalId = "ghc-prim-0.5.1.1|GHC.Types|Typ|IO" }) +      , isExported       = False +      } +    ) +  , ( InternalId { getInternalId = "12" } +    , IdentifierInfo +      { sort             = External +      , occName          = OccName { getOccName = "Test" } +      , demangledOccName = "Test" +      , nameSpace        = DataName +      , locationInfo     = ExactLocation +        { packageId   = PackageId { name    = "test-package" +                                  , version = makeVersion [0, 1, 0, 0] +                                  } +        , modulePath = HaskellModulePath { getHaskellModulePath = "src/Types.hs" +                                         } +        , moduleName  = HaskellModuleName { getHaskellModuleName = "Types" } +        , startLine   = 5 +        , endLine     = 5 +        , startColumn = 13 +        , endColumn   = 21 +        } +      , idType           = Type +        { components         = +          [ TyCon { internalId = InternalId { getInternalId = "9" } +                  , name       = "Int" +                  } +          , Text " -> " +          , TyCon { internalId = InternalId { getInternalId = "1" } +                  , name       = "Test" +                  } +          ] +        , componentsExpanded = Nothing +        } +      , details          = Just DataConWorkId +      , doc              = Nothing +      , internalId       = InternalId { getInternalId = "12" } +      , externalId       = Just +        (ExternalId { getExternalId = "test-package-0.1.0.0|Types|Val|Test" }) +      , isExported       = False +      } +    ) +  , ( InternalId { getInternalId = "17" } +    , IdentifierInfo +      { sort             = External +      , occName          = OccName { getOccName = "[]" } +      , demangledOccName = "[]" +      , nameSpace        = TcClsName +      , locationInfo     = ApproximateLocation +                             { packageId       = PackageId +                                                   { name = "ghc-prim" +                                                   , version = makeVersion [0, 5, 1, 1] +                                                   } +                             , moduleName      = HaskellModuleName +                                                   { getHaskellModuleName = "GHC.Types" +                                                   } +                             , entity          = Typ +                             , name            = "[]" +                             , haddockAnchorId = Just "-91--93-" +                             , componentId = ComponentId { getComponentId = "lib" } +                             } +      , idType           = Type { components         = [Text "* -> *"] +                                , componentsExpanded = Nothing +                                } +      , details          = Nothing +      , doc              = Nothing +      , internalId       = InternalId { getInternalId = "17" } +      , externalId       = Just +        (ExternalId { getExternalId = "ghc-prim-0.5.1.1|GHC.Types|Typ|[]" }) +      , isExported       = False +      } +    ) +  , ( InternalId { getInternalId = "1" } +    , IdentifierInfo +      { sort             = External +      , occName          = OccName { getOccName = "Test" } +      , demangledOccName = "Test" +      , nameSpace        = TcClsName +      , locationInfo     = ExactLocation +        { packageId   = PackageId { name    = "test-package" +                                  , version = makeVersion [0, 1, 0, 0] +                                  } +        , modulePath = HaskellModulePath { getHaskellModulePath = "src/Types.hs" +                                         } +        , moduleName  = HaskellModuleName { getHaskellModuleName = "Types" } +        , startLine   = 5 +        , endLine     = 5 +        , startColumn = 1 +        , endColumn   = 21 +        } +      , idType = Type { components = [Text "*"], componentsExpanded = Nothing } +      , details          = Nothing +      , doc              = Nothing +      , internalId       = InternalId { getInternalId = "1" } +      , externalId       = Just +        (ExternalId { getExternalId = "test-package-0.1.0.0|Types|Typ|Test" }) +      , isExported       = False +      } +    ) +  , ( InternalId { getInternalId = "18" } +    , IdentifierInfo +      { sort             = External +      , occName          = OccName { getOccName = "LiftedRep" } +      , demangledOccName = "LiftedRep" +      , nameSpace        = DataName +      , locationInfo     = ApproximateLocation +                             { packageId       = PackageId +                                                   { name = "ghc-prim" +                                                   , version = makeVersion [0, 5, 1, 1] +                                                   } +                             , moduleName      = HaskellModuleName +                                                   { getHaskellModuleName = "GHC.Types" +                                                   } +                             , entity          = Val +                             , name            = "LiftedRep" +                             , haddockAnchorId = Just "LiftedRep" +                             , componentId = ComponentId { getComponentId = "lib" } +                             } +      , idType           = Type +                             { components         = [ TyCon +                                                        { internalId = InternalId +                                                                         { getInternalId = "15" +                                                                         } +                                                        , name = "RuntimeRep" +                                                        } +                                                    ] +                             , componentsExpanded = Nothing +                             } +      , details          = Nothing +      , doc              = Nothing +      , internalId       = InternalId { getInternalId = "18" } +      , externalId       = +        Just +          (ExternalId +            { getExternalId = "ghc-prim-0.5.1.1|GHC.Types|Val|LiftedRep" +            } +          ) +      , isExported       = False +      } +    ) +  , ( InternalId { getInternalId = "4" } +    , IdentifierInfo +      { sort             = External +      , occName          = OccName { getOccName = "()" } +      , demangledOccName = "()" +      , nameSpace        = TcClsName +      , locationInfo     = ApproximateLocation +                             { packageId       = PackageId +                                                   { name = "ghc-prim" +                                                   , version = makeVersion [0, 5, 1, 1] +                                                   } +                             , moduleName      = HaskellModuleName +                                                   { getHaskellModuleName = "GHC.Tuple" +                                                   } +                             , entity          = Typ +                             , name            = "()" +                             , haddockAnchorId = Just "-40--41-" +                             , componentId = ComponentId { getComponentId = "lib" } +                             } +      , idType = Type { components = [Text "*"], componentsExpanded = Nothing } +      , details          = Nothing +      , doc              = Nothing +      , internalId       = InternalId { getInternalId = "4" } +      , externalId       = Just +        (ExternalId { getExternalId = "ghc-prim-0.5.1.1|GHC.Tuple|Typ|()" }) +      , isExported       = False +      } +    ) +  , ( InternalId { getInternalId = "16" } +    , IdentifierInfo +      { sort             = External +      , occName          = OccName { getOccName = "String" } +      , demangledOccName = "String" +      , nameSpace        = TcClsName +      , locationInfo     = ApproximateLocation +                             { packageId       = PackageId +                                                   { name = "base" +                                                   , version = makeVersion [4, 10, 1, 0] +                                                   } +                             , moduleName      = HaskellModuleName +                                                   { getHaskellModuleName = "GHC.Base" +                                                   } +                             , entity          = Typ +                             , name            = "String" +                             , haddockAnchorId = Just "String" +                             , componentId = ComponentId { getComponentId = "lib" } +                             } +      , idType = Type { components = [Text "*"], componentsExpanded = Nothing } +      , details          = Nothing +      , doc              = Nothing +      , internalId       = InternalId { getInternalId = "16" } +      , externalId       = Just +        (ExternalId { getExternalId = "base-4.10.1.0|GHC.Base|Typ|String" }) +      , isExported       = False +      } +    ) +  , ( InternalId { getInternalId = "2" } +    , IdentifierInfo +      { sort             = External +      , occName          = OccName { getOccName = "someFunc" } +      , demangledOccName = "someFunc" +      , nameSpace        = VarName +      , locationInfo     = ExactLocation +        { packageId   = PackageId { name    = "test-package" +                                  , version = makeVersion [0, 1, 0, 0] +                                  } +        , modulePath = HaskellModulePath { getHaskellModulePath = "src/Lib.hs" } +        , moduleName  = HaskellModuleName { getHaskellModuleName = "Lib" } +        , startLine   = 9 +        , endLine     = 9 +        , startColumn = 1 +        , endColumn   = 9 +        } +      , idType           = Type +                             { components         = [ TyCon +                                                      { internalId = InternalId +                                                                       { getInternalId = "0" +                                                                       } +                                                      , name       = "IO" +                                                      } +                                                    , Text " ()" +                                                    ] +                             , componentsExpanded = Nothing +                             } +      , details          = Just VanillaId +      , doc              = Just "<p><span>someFunc documentation</span></p>" +      , internalId       = InternalId { getInternalId = "2" } +      , externalId       = Just +        (ExternalId { getExternalId = "test-package-0.1.0.0|Lib|Val|someFunc" }) +      , isExported       = True +      } +    ) +  , ( InternalId { getInternalId = "5" } +    , IdentifierInfo +      { sort             = External +      , occName          = OccName { getOccName = "putStrLn" } +      , demangledOccName = "putStrLn" +      , nameSpace        = VarName +      , locationInfo     = ApproximateLocation +                             { packageId       = PackageId +                                                   { name = "base" +                                                   , version = makeVersion [4, 10, 1, 0] +                                                   } +                             , moduleName      = HaskellModuleName +                                                   { getHaskellModuleName = "System.IO" +                                                   } +                             , entity          = Val +                             , name            = "putStrLn" +                             , haddockAnchorId = Just "putStrLn" +                             , componentId = ComponentId { getComponentId = "lib" } +                             } +      , idType           = Type +        { components         = +          [ TyCon { internalId = InternalId { getInternalId = "16" } +                  , name       = "String" +                  } +          , Text " -> " +          , TyCon { internalId = InternalId { getInternalId = "0" } +                  , name       = "IO" +                  } +          , Text " ()" +          ] +        , componentsExpanded = Just +          [ Text "[" +          , TyCon { internalId = InternalId { getInternalId = "6" } +                  , name       = "Char" +                  } +          , Text "] -> " +          , TyCon { internalId = InternalId { getInternalId = "0" } +                  , name       = "IO" +                  } +          , Text " ()" +          ] +        } +      , details          = Just VanillaId +      , doc              = Nothing +      , internalId       = InternalId { getInternalId = "5" } +      , externalId       = Just +        (ExternalId { getExternalId = "base-4.10.1.0|System.IO|Val|putStrLn" }) +      , isExported       = False +      } +    ) +  , ( InternalId { getInternalId = "6" } +    , IdentifierInfo +      { sort             = External +      , occName          = OccName { getOccName = "Char" } +      , demangledOccName = "Char" +      , nameSpace        = TcClsName +      , locationInfo     = ApproximateLocation +                             { packageId       = PackageId +                                                   { name = "ghc-prim" +                                                   , version = makeVersion [0, 5, 1, 1] +                                                   } +                             , moduleName      = HaskellModuleName +                                                   { getHaskellModuleName = "GHC.Types" +                                                   } +                             , entity          = Typ +                             , name            = "Char" +                             , haddockAnchorId = Just "Char" +                             , componentId = ComponentId { getComponentId = "lib" } +                             } +      , idType = Type { components = [Text "*"], componentsExpanded = Nothing } +      , details          = Nothing +      , doc              = Nothing +      , internalId       = InternalId { getInternalId = "6" } +      , externalId       = Just +        (ExternalId { getExternalId = "ghc-prim-0.5.1.1|GHC.Types|Typ|Char" }) +      , isExported       = False +      } +    ) +  , ( InternalId { getInternalId = "9" } +    , IdentifierInfo +      { sort             = External +      , occName          = OccName { getOccName = "Int" } +      , demangledOccName = "Int" +      , nameSpace        = TcClsName +      , locationInfo     = ApproximateLocation +                             { packageId       = PackageId +                                                   { name = "ghc-prim" +                                                   , version = makeVersion [0, 5, 1, 1] +                                                   } +                             , moduleName      = HaskellModuleName +                                                   { getHaskellModuleName = "GHC.Types" +                                                   } +                             , entity          = Typ +                             , name            = "Int" +                             , haddockAnchorId = Just "Int" +                             , componentId = ComponentId { getComponentId = "lib" } +                             } +      , idType = Type { components = [Text "*"], componentsExpanded = Nothing } +      , details          = Nothing +      , doc              = Nothing +      , internalId       = InternalId { getInternalId = "9" } +      , externalId       = Just +        (ExternalId { getExternalId = "ghc-prim-0.5.1.1|GHC.Types|Typ|Int" }) +      , isExported       = False +      } +    ) +  , ( InternalId { getInternalId = "10" } +    , IdentifierInfo +      { sort             = Internal +      , occName          = OccName { getOccName = "i" } +      , demangledOccName = "i" +      , nameSpace        = VarName +      , locationInfo     = ExactLocation +        { packageId   = PackageId { name    = "test-package" +                                  , version = makeVersion [0, 1, 0, 0] +                                  } +        , modulePath = HaskellModulePath { getHaskellModulePath = "src/Lib.hs" } +        , moduleName  = HaskellModuleName { getHaskellModuleName = "" } +        , startLine   = 13 +        , endLine     = 13 +        , startColumn = 8 +        , endColumn   = 9 +        } +      , idType           = Type +        { components = [ TyCon { internalId = InternalId { getInternalId = "9" } +                               , name       = "Int" +                               } +                       ] +        , componentsExpanded = Nothing +        } +      , details          = Just VanillaId +      , doc              = Nothing +      , internalId       = InternalId { getInternalId = "10" } +      , externalId       = Nothing +      , isExported       = False +      } +    ) +  ]  | 
