2011-07-05 28 views
19

Tôi đang cố gắng nhúng một Haskell REPL trong một trong các ứng dụng Haskell của tôi. Ý tưởng sẽ là chỉ một tập hợp con của các thư viện Haskell sẽ được tải theo mặc định, cộng với tập hợp các hàm của riêng tôi và người dùng sẽ sử dụng các hàm đó để tương tác với môi trường. Để giải quyết vấn đề này, tôi biết một cách để tạo một bộ phân tích cú pháp (mini-) Haskell + và ánh xạ các hàm phân tích cú pháp mini-Haskell của tôi thành các hàm Haskell thực tế, nhưng tôi chắc chắn có một cách tốt hơn để làm cái này.Tạo một Haskell REPL trong một ứng dụng Haskell

Có cách nào tốt đẹp và sạch sẽ để xây dựng REPL cho Haskell bằng Haskell không?

+0

Có sử dụng thư viện GHC cho bạn không? (Họ cung cấp nhiều cách để tương tác với mã Haskell đã biên dịch) – fuz

+0

Có, đó là một tùy chọn, nhưng tôi không có kinh nghiệm sử dụng chúng. Bạn có thể hướng dẫn tôi đến các thư viện chính xác để tôi có thể xem chúng không? – CharlieP

+0

Làm thế nào để xem [haskell.org] (http://haskell.org/haskellwiki/GHC/As_a_library)? – fuz

Trả lời

10

Một vài điều mà đã tồn tại:

  • GHCi, tất nhiên, cả theo nghĩa của việc có thể để xem làm thế nào nó được thực hiện hoặc có thể sử dụng nó trực tiếp (ví dụ, đã REPL của bạn chỉ cần nói chuyện đến GHCi qua stdin/stdout).
  • Các full GHC API, cho phép bạn móc vào GHC và để cho nó làm tất cả những nâng nặng cho bạn - tải các tập tin, theo đuổi phụ thuộc, phân tích, kiểm tra kiểu vv
  • hint, mà là một wrapper xung quanh một tập hợp con của API GHC, tập trung vào giải thích tương tác hơn là biên dịch - có vẻ phù hợp với những gì bạn muốn làm.
  • mueval, một bộ đánh giá có giới hạn về các mô-đun đã tải, sử dụng tài nguyên, v.v ... về cơ bản là chế độ tương tác "an toàn". Đó là những gì lambdabot sử dụng, nếu bạn đã từng ở trong kênh IRC#haskell.

Tất cả những điều trên đều giả định rằng bạn không muốn tự mình viết một trình thông dịch Haskell, có thể là trường hợp đó.

Các vấn đề liên quan