2010-02-11 8 views
24

टाइपशेक टाइप करें मैं हास्केल कोड का विश्लेषण करने के लिए एक प्रोजेक्ट पर काम कर रहा हूं। मैंने जीएचसी का उपयोग करने के लिए अपना खुद का कोड लिखने के बजाय स्रोत और अनुमानित प्रकारों को पार्स करने का निर्णय लिया। अभी, मैं हैडॉक दस्तावेज़ों के माध्यम से slogging हूँ, लेकिन यह धीमी गति से चल रहा है। क्या किसी को एक अच्छा ट्यूटोरियल पता है?जीएचसी का उपयोग करने के लिए एक ट्यूटोरियल की आवश्यकता है और हास्केल

संपादित करें: स्पष्टीकरण के लिए, मैं hlint की तरह कुछ नहीं ढूंढ रहा हूं। मैं हास्केल कोड की रनटाइम विशेषताओं का विश्लेषण करने के लिए अपना स्वयं का टूल लिख रहा हूं, इसलिए ऐसा लगता है कि मैं एक अलग ह्लिंट लिख रहा हूं। जो मैं खोज रहा हूं वह मूल रूप से विकी पेज GHC As a library का विस्तार है।

+3

यह वास्तव में एक महत्वपूर्ण आवश्यकता है! –

+0

@Adam क्या आपको अभी तक उत्तर मिला है। मैं एक समान आवेदन पर भी काम कर रहा हूं। – Satvik

+0

इस पर कोई प्रगति हुई है? यह एक 3 साल का सवाल है लेकिन इस तरह का एक ट्यूटोरियल वही है जो मैं ढूंढ रहा हूं। – jmite

उत्तर

9

एडम, यह बहुत कठिन स्लिंगिंग है। 2006 में लॉन्च होने के बाद से, जीएचसी एपीआई कुछ हद तक दस्तावेज किया गया है। मैं अनुशंसा करता हूं कि जीएचसी एपीआई का उपयोग करके लिखे गए कुछ छोटे एप्लिकेशन ढूंढने का प्रयास करें। पूछने का सही स्थान शायद GHC users' mailing list है।

ऐसा एक प्रोग्राम ghctags है, जो जीएचसी स्रोत पेड़ के साथ जहाजों है। मैंने मूल संस्करण लिखा है, लेकिन मैं इसे अनुशंसा नहीं कर सकता — कोड पर इतने सारे पैरों के निशान हैं जिन्हें मैं अब इसका पालन नहीं कर सकता। सबसे अच्छा मैं कह सकता हूं कि यद्यपि इसका पालन करना मुश्किल है, यह कम से कम छोटा है और — का पालन करने के लिए कठिन है सभी जीएचसी की तुलना में बहुत आसान है।

-1

Haskell wiki और GHC documentation शायद आपके पास लेखों की खोज करने के लिए आप जो खोज रहे हैं वह शायद आपके पास है। सिंटैक्स और आपके स्रोत कोड के बारे में अन्य चीजों की जांच के लिए, आपके पास रुचि रखने वाला टूल भी hlint है।

+1

मैंने पहले ही वहां देखा है। "जीएचसी लाइब्रेरी के रूप में" (http://haskell.org/haskellwiki/GHC/As_a_library) बिल्कुल वही विषय है जिस पर मुझे जानकारी चाहिए, लेकिन पृष्ठ निराशाजनक रूप से स्पैस है। hlint जो मैं चाहता हूँ वह नहीं करता है। –

10

आह! यहाँ

हम parseModule, typecheckModule, desugarModule, getNamesInScope, और getModuleGraph बुला प्रदर्शित: पर दस्तावेज़ों में एक बहुत अच्छा प्रवेश बिंदु पाया: http://www.haskell.org/ghc/docs/latest/html/libraries/ghc-6.12.1/GHC.html

मैं इस उदाहरण के साथ wikipage अपडेट किया गया। यह हैकेल-प्लेटफॉर्म, ghc-6.12.1 के लिए काम करता है।

कीड़े: libdir हार्डकोड किया गया है। ऊपर ghc-path देखें।

--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!" 
+1

क्या आपके पास आगे बढ़ने के लिए कोई उदाहरण है? मेरा मतलब है कि कोर को द्विआधारी में कैसे संकलित करना है? –

1

तो पार्स सबसे महत्वपूर्ण बात है, मैं Haskell-src-exts सलाह देते हैं। यह सभी Haskell98, एक्सटेंशन का एक पूरा ढेर पार्स करता है और उपयोग करने में बहुत आसान है।

संबंधित मुद्दे