تحتاج إلى برنامج تعليمي لاستخدام GHC لتحليل و Typecheck Haskell

StackOverflow https://stackoverflow.com/questions/2242986

  •  19-09-2019
  •  | 
  •  

سؤال

أنا أعمل في مشروع لتحليل كود Haskell. قررت استخدام GHC لتحليل أنواع المصدر والنتائج بدلا من كتابة الرمز الخاص بي للقيام بذلك. الآن، أنا أشمل من خلال مستندات الحدوق، لكنها تذهب بطيئا. لا أحد يعرف برامج تعليمية جيدة؟

تحرير: للتوضيح، أنا لا أبحث عن شيء مثل hlint. أنا أكتب أداةي الخاصة لتحليل خصائص وقت تشغيل رمز Haskell، لذلك فهي مثل أكتب الإقليم المختلفة. ما أبحث عنه هو أساسا التوسع في صفحة الويكي GHC كمكتبة.

هل كانت مفيدة؟

المحلول

آدم، هذا هو شلاع قوي جدا. منذ إطلاقها في عام 2006، كان API GHC غير منتظم إلى حد ما. ما أوصي به هو محاولة العثور على بعض التطبيقات الصغيرة التي تمت كتابتها باستخدام API GHC. المكان المناسب للسؤال هو ربما القائمة البريدية للمستخدمين GHC.

هذا البرنامج هو ghctags, ، التي تشحن مع شجرة مصدر GHC. كتبت النسخة الأصلية، لكنني لا أستطيع أن أوصي به، فهناك العديد من آثار أقدام على الكود الذي لم أعد أستطيع متابعته. أفضل ما يمكنني قوله هو أنه على الرغم من صعوبة اتباعه، إلا أنه على الأقل صغير ويصعب اتباع أبسط بكثير من كل من GHC.

نصائح أخرى

آه! وجدت نقطة دخول أفضل بكثير في المستندات في: http://www.haskell.org/ghc/docs/latest/html/libraries/ghc-6.12.1/gh.html.

لقد قمت بتحديث ويكيف مع هذا المثال:

هنا نوضح استدعاء Parsemodule، typecheckmodule، desugarmodule، getnamesinscope، getmodulegraph. هذا يعمل في منصة Haskell، GHC-6.12.1.

البق: libdir هو الصغار. انظر مسارات GHC أعلاه.

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

إذا التحليل هو الشيء الأكثر أهمية، أوصي Haskell-SRC-Exts. يوزع كل من Haskell98، كومة كاملة من الامتدادات وسهلة الاستخدام للغاية.

ال Haskell Wiki. و وثائق جي سي ربما لديه ما تبحث عنه إذا كنت تبحث عن المقالات. أيضا أداة قد تكون مهتما بها هي هيلينت, ، للتحقق من بناء الجملة وأشياء أخرى حول شفرة المصدر الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top