Ich bin neu bei Haskell und bin verwirrt darüber, wie man Werte aus Funktionsergebnissen herausholt. In meinem speziellen Fall versuche ich, Haskell-Dateien zu analysieren und zu sehen, welche AST-Knoten in welchen Zeilen angezeigt werden. Dies ist der Code, den ich bisher habe:Informationen aus dem Haskell-Objekt extrahieren
import Language.Haskell.Parser
import Language.Haskell.Syntax
getTree :: String -> IO (ParseResult HsModule)
getTree path = do
file <- readFile path
let tree = parseModuleWithMode (ParseMode path) file
return tree
main :: IO()
main = do
tree <- getTree "ex.hs"
-- <do something with the tree other than print it>
print tree
So auf der Linie, wo ich den Kommentar, ich habe einen Syntaxbaum als tree
. Es scheint Typ ParseResult HsModule
zu haben. Was ich will, ist nur HsModule
. Ich denke, was ich suche eine Funktion ist wie folgt:
extract :: ParseResult a -> a
Oder noch besser, eine allgemeine Haskell Funktion
extract :: AnyType a -> a
Vielleicht ein großes Konzept über Haskell ich hier fehlt bin?
p.s. Ich verstehe, dass es falsch ist, über diese Dinge als "Objekte" zu denken und "Felder" von ihnen zu erreichen, aber ich hätte gerne eine Erklärung, wie ich mit dieser Art von Dingen im Allgemeinen umgehen soll.
'getData' ist falsch. Bailing mit 'error' ist der falsche Weg, um einen Parse-Fehler zu behandeln. – dfeuer