tutorial - instalar haskell en ubuntu
Necesita un tutorial para usar GHC para analizar y revisar Typk Haskell (4)
Estoy trabajando en un proyecto para analizar el código de Haskell. Decidí usar GHC para analizar la fuente e inferir tipos en lugar de escribir mi propio código para hacer eso. En este momento, estoy revisando los documentos de Haddock, pero es lento. ¿Alguien sabe de un buen tutorial?
EDITAR: Para aclarar, no estoy buscando algo como hlint. Estoy escribiendo mi propia herramienta para analizar las características de tiempo de ejecución del código Haskell, así que es como si estuviera escribiendo un hlint diferente. Lo que busco es básicamente una expansión de la página wiki GHC Como una biblioteca .
Adam, esto es un trineo bastante duro. Desde su lanzamiento en 2006, la API de GHC ha estado poco documentada. Lo que recomendaría es tratar de encontrar algunas aplicaciones pequeñas que se hayan escrito utilizando la API de GHC. El lugar correcto para preguntar es probablemente la lista de correo de los usuarios de GHC .
Uno de estos programas es ghctags
, que se envía con el árbol de fuentes de GHC. Escribí la versión original, pero no puedo recomendarlo, hay tantas huellas en el código que ya no puedo seguirlo. Lo mejor que puedo decir es que, aunque es difícil de seguir, al menos es pequeño y difícil de seguir, mucho más simple que todos los GHC.
Ah! Encontré un punto de entrada mucho mejor en los documentos en: http://www.haskell.org/ghc/docs/latest/html/libraries/ghc-6.12.1/GHC.html
Actualicé el wikipage con este ejemplo:
Aquí demostramos que se llama parseModule, typecheckModule, desugarModule, getNamesInScope y getModuleGraph. Esto funciona para la plataforma haskell, ghc-6.12.1.
errores: libdir está codificado. Ver ghc-caminos arriba.
--A.hs
--invoke: ghci -package ghc A.hs
import GHC
import Outputable
--import GHC.Paths ( libdir )
import DynFlags ( defaultDynFlags )
libdir = "/usr/local/lib/ghc-6.12.1"
targetFile = "B.hs"
main = do
res <- example
print $ showSDoc ( ppr res )
example =
defaultErrorHandler defaultDynFlags $ do
runGhc (Just libdir) $ do
dflags <- getSessionDynFlags
setSessionDynFlags dflags
target <- guessTarget targetFile Nothing
setTargets [target]
load LoadAllTargets
modSum <- getModSummary $ mkModuleName "B"
p <- parseModule modSum
t <- typecheckModule p
d <- desugarModule t
l <- loadModule d
n <- getNamesInScope
c <- return $ coreModule d
g <- getModuleGraph
mapM showModule g
return $ (parsedSource d,"/n-----/n", typecheckedSource d)
--B.hs
module B where
main = print "Hello, World!"
La wiki de Haskell y la documentación de GHC probablemente tienen lo que está buscando si busca los artículos. También una herramienta en la que podría estar interesado es hlint , para verificar la sintaxis y otras cosas sobre su código fuente.
Si el análisis es lo más importante, recomiendo haskell-src-exts. Analiza todo Haskell98, un montón de extensiones y es muy fácil de usar.