Я пытаюсь использовать функцию exactPrint
для генерации некоторого кода, но это не дает мне никакого вывода.Пробовал сначала с поддельными SrcSpan
с, а затем с фактическим номером SrcSpan
информации о местоположении.Также пытались использовать фиктивные аннотации, повторно использованные аннотации (от анализа другого .hs
файла и рукописных аннотаций. Кажется, ни одна из них не работает.
Вывод - пустая строка.
Здесьмой код:
import Language.Haskell.GHC.ExactPrint
import qualified Data.ByteString as BS
-- import Data.Text as T
import Data.List as DL
import GHC hiding (parseModule)
import qualified HsSyn as GHC
import qualified RdrName as GHC
import qualified SrcLoc as GHC
import SrcLoc
import Safe
import BasicTypes
import qualified Data.Map as Map
import FastString
rlSrcSpan :: SrcSpan
rlSrcSpan = mkSrcSpan (mkSrcLoc (fsLit "testFiles/SampleCode.hs") 1 1) (mkSrcLoc (fsLit "testFiles/SampleCode.hs") 10 20)
srcSpan :: (Int, Int, Int, Int) -> SrcSpan
srcSpan (sLine, sCol, eLine, eCol) = mkSrcSpan (mkSrcLoc (fsLit "testFiles/SampleCode.hs") sLine sCol) (mkSrcLoc (fsLit "testFiles/SampleCode.hs") eLine eCol)
newAnn :: Anns
newAnn =
let annKey = AnnKey noSrcSpan (CN "AnnName")
kwId = AnnSemiSep
currentAnnsDP = [(kwId, DP (10, 2) )]
in Map.singleton annKey (Ann (DP (1, 1) ) [] [] currentAnnsDP Nothing Nothing )
outputModule :: IO ()
outputModule = putStrLn $ "Haskell Module: " ++ (exactPrint (L rlSrcSpan haskellModule) newAnn )
haskellModule :: GHC.HsModule GHC.GhcPs
haskellModule = do
let modName = Just $ L (srcSpan (2, 1, 2, 30) ) $ mkModuleName "TestQueryDBR"
let exportList = Nothing
let importList = [L (srcSpan (3, 1, 4, 30) ) $ ImportDecl (SourceText "mod") (L (srcSpan (3, 1, 4, 30) ) $ mkModuleName "Data.Text") Nothing False False False False (Just $ L (srcSpan (3, 10, 3, 30) ) $ mkModuleName "T") Nothing ]
let declarations = []
GHC.HsModule modName exportList importList declarations Nothing Nothing