2011-07-05 21 views
19

Próbuję umieścić REPLIK Haskella w jednej z moich aplikacji Haskella. Pomysł polegałby na tym, że domyślnie byłby załadowany tylko podzbiór bibliotek Haskella plus mój własny zestaw funkcji, a użytkownik użyłby tych bibliotek w celu interakcji ze środowiskiem.Tworzenie replikatora Haskella w aplikacji Haskella

Aby rozwiązać ten problem, wiem, że jednym ze sposobów byłoby utworzenie parsera + ewaluatora (mini-) Haskella i mapowanie funkcji mojego parsera mini-Haskella na rzeczywiste funkcje Haskella, ale jestem pewien, że istnieje lepszy sposób na Zrób to.

Czy istnieje ładny i czysty sposób na zbudowanie REPL dla Haskell za pomocą Haskella?

+0

Czy używasz bibliotek GHC jako opcji? (Zapewniają mnóstwo sposobów interakcji ze skompilowanym kodem Haskella) – fuz

+0

Tak, jest to opcja, ale nie mam żadnego doświadczenia z ich używaniem. Czy możesz skierować mnie do odpowiednich bibliotek, abym mógł je obejrzeć? – CharlieP

+0

Co powiesz na [haskell.org] (http://haskell.org/haskellwiki/GHC/As_a_library)? – fuz

Odpowiedz

10

Kilka rzeczy, które już istnieją:

  • GHCi Oczywiście, zarówno w sensie bycia w stanie spojrzeć na to, jak jest to realizowane lub są w stanie używać go bezpośrednio (czyli mają swoją REPL prostu porozmawiać do GHCi przez stdin/stdout).
  • The, full GHC API który pozwala zaczepić w GHC i pozwolić mu wykonać całą podnoszenia ciężkich dla Ciebie - wczytywania plików, goniąc zależności, analizowanie, rodzaj kontroli, itp
  • hint, które jest otoki wokół podzbioru API GHC, z naciskiem na interaktywną interpretację zamiast kompilacji - która wydaje się pasować do tego, co chcesz robić.
  • mueval, ewaluator z ograniczeniami dotyczącymi ładowanych modułów, wykorzystania zasobów itp., Zasadniczo "bezpieczny" tryb interaktywny. To właśnie używa lambdabot, jeśli kiedykolwiek byłeś na kanale IRC# haskell.

Wszystkie powyższe zasady zakładają, że nie chcesz zajmować się pisaniem tłumacza Haskella, co prawdopodobnie ma miejsce.