2013-05-04 9 views
10

Ho bisogno di un modo (veloce e sporco) per ottenere una rappresentazione del tipo di un'espressione Haskell fornita come stringa.Inferere il tipo di una stringa contenente un'espressione Haskell

Io attualmente vedere 3 opzioni:

  • Usa GHC API - tuttavia, la documentazione mi perde abbastanza rapidamente.
  • Utilizzare qualche altro strumento di inferenza di tipo: mi è stato suggerito di provare haskell-type-exts, ma non riesce a digitare tutti tranne le espressioni più banali. Non conosco altri strumenti simili.
  • rotolare il mio inferer HM - Eviterei questo se non assolutamente necessario

non ho nemmeno bisogno di una soluzione completa, nel senso che una biblioteca/strumento che può digitare un sottoinsieme di base ragionevole di Haskell sarebbe abbastanza per me.

Quindi qual è il modo più semplice per raggiungere questo obiettivo?

+0

Dai un'occhiata alla [altre implementazioni Haskell] (http://www.haskell.org/haskellwiki/Implementations) - alcuni di essi potrebbero essere più semplici da utilizzare rispetto a GHC. –

+2

Se vai a scrivere il tuo, Mark P. Jones '[THIH] (http://web.cecs.pdx.edu/~mpj/thih/) potrebbe essere un buon inizio. –

risposta

17

hint package offre un'interfaccia un po 'limitata ma forse più comprensibile all'API GHC. Forse è sufficiente per i tuoi scopi? In caso contrario, è possibile esaminare le fonti per avere un'idea migliore di come utilizzare direttamente l'API GHC.

Ecco un esempio di programma:

import Language.Haskell.Interpreter 

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

Se eseguito, questo stampa

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

questa è roba fantastica, grazie! – xcvii

Problemi correlati