2013-05-04 19 views
10

Potrzebuję (szybki i brudny) sposób, aby uzyskać reprezentację typu wyrażenia Haskell podanego jako ciąg.Typ polecenia ciąg zawierający wyrażenie Haskella

I obecnie zobaczyć 3 opcje:

  • Zastosowanie GHC API - jednak dokumentacja traci mnie dość szybko.
  • Użyj innego narzędzia do wnioskowania typu - zaproponowano mi wypróbowanie typ-ext, ale nie udało się wpisać wszystkich, ale najbardziej trywialnych wyrażeń. Nie znam żadnego innego takiego narzędzia.
  • rolki moje własne inferer HM - Chciałbym tego uniknąć, chyba że jest to absolutnie konieczne

I nie trzeba nawet kompletne rozwiązanie, w tym sensie, że biblioteka/narzędzie, które może wpisać rozsądny podstawowy podzbiór Haskell byłby dla mnie wystarczający.

Jaki jest najprostszy sposób na osiągnięcie tego?

+0

Zapraszamy do obejrzenia innych implementacjach Haskell [] (http://www.haskell.org/haskellwiki/Implementations) - niektóre z nich mogą być łatwiejsze w użyciu niż GHC. –

+2

Jeśli zaczniesz pisać własne, Mark P. Jones "[THIH] (http://web.cecs.pdx.edu/~mpj/thih/) może być dobrym początkiem. –

Odpowiedz

17

Interfejs hint package oferuje nieco ograniczony, ale być może bardziej zrozumiały interfejs interfejsu API GHC. Być może jest to wystarczające dla twoich celów? Jeśli nie, możesz spojrzeć na źródła, aby uzyskać lepszy pomysł, jak bezpośrednio korzystać z interfejsu API GHC.

Oto przykładowy program:

import Language.Haskell.Interpreter 

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

Jeśli uruchomić ten drukuje

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

to jest niesamowite rzeczy, dzięki! – xcvii

Powiązane problemy