2013-05-04 5 views
10

Ich brauche einen (schnellen und schmutzigen) Weg, um eine Darstellung des Typs eines Haskell-Ausdrucks zu erhalten, der als String angegeben wird.Infer-Typ einer Zeichenfolge, die einen Haskell-Ausdruck enthält

Ich sehe zur Zeit 3 ​​Möglichkeiten:

  • Verwenden GHC API - aber die Dokumentation mich ziemlich schnell verliert.
  • Verwenden Sie eine andere Art Inferenz-Tool - Ich wurde vorgeschlagen, Haskell-Typ-Exts zu versuchen, aber es gibt nicht alle außer die trivial Ausdrücke. Ich kenne kein anderes solches Werkzeug.
  • Rolle meines eigenen HM inferer - ich dies, wenn es unbedingt vermeiden würde notwendig

Ich brauche nicht einmal eine komplette Lösung, in dem Sinne, dass eine Bibliothek/Werkzeug, das eine vernünftige Untergruppe von eingeben kann Haskell würde mir genügen.

Was ist der einfachste Weg, dies zu erreichen?

+0

Werfen Sie einen Blick auf [andere Haskell-Implementierungen] (http://www.haskell.org/haskellwiki/Implementations) - einige von ihnen könnten einfacher zu verwenden als GHC sein. –

+2

Wenn Sie Ihre eigenen schreiben, kann Mark P. Jones '[THIH] (http://web.cecs.pdx.edu/~mpj/thih/) ein guter Anfang sein. –

Antwort

17

Die hint package bietet eine etwas eingeschränkte, aber vielleicht verständlichere Schnittstelle zur GHC API. Vielleicht reicht es für Ihre Zwecke? Wenn nicht, können Sie sich vielleicht die Quellen ansehen, um eine bessere Vorstellung davon zu bekommen, wie Sie die GHC-API direkt nutzen können.

Hier ist ein Beispiel-Programm:

import Language.Haskell.Interpreter 

main :: IO() 
main = do 
    r <- runInterpreter $ do 
    setImports ["Prelude"] 
    typeOf "map (+1)" 
    either print putStrLn r 

Wenn laufen, das druckt

Num b => [b] -> [b] 
+0

das ist geniales Zeug, danke! – xcvii

Verwandte Themen