2008-12-04 26 views
7

Tôi là một chút gỉ trên Haskell của tôi và đang tìm cách để đoạn đường nối trở lại. Một điều tôi thích từ F # là F # Interactive shell tích hợp với Visual Studio: Tôi có thể đánh giá hầu như bất cứ điều gì (bao gồm cả định nghĩa hàm và lớp) và sử dụng F # làm trình bao. Có tương đương trong Haskell không? Khi tôi sử dụng ghci, tôi không thể đánh giá các định nghĩa chức năng. Làm thế nào để bạn làm việc xung quanh đó?Haskell Interactive

Cài đặt ưa thích hiện tại của tôi đang sử dụng Emacs với chế độ haskell và mở trình thông dịch ghi tương tác. Tuy nhiên, có cách nào để đánh giá vùng của một tệp không?

Trả lời

8

Bạn có thể định nghĩa một hàm sử dụng 'let':

$ ghci 
Prelude> let double n = n + n 
Prelude> double 42 
84 

Ngoài ra, tôi sẽ không hoàn toàn đề nghị này, vì (A) Tôi đã viết nó, và (B) đó là khủng khiếp chưa phát triển, nhưng Halp thể có ích trong Emacs - nó giống như một bảng tính cho mã Haskell được tích hợp ngay vào bộ đệm mã nguồn của bạn. Bạn có thể có một tập hợp các biểu thức mà bạn quan tâm và với một phím tắt xem tất cả các giá trị của chúng thay đổi như thế nào tùy thuộc vào các chỉnh sửa của bạn kể từ lần đánh giá lại cuối cùng.

+1

Cảm ơn. Halp trông thực sự tiện dụng. Tôi sẽ thử nó :) – namin

+1

Cool! Các cải tiến sẽ được hoan nghênh - phiên bản Python được đánh bóng hơn bởi vì tôi sử dụng Python nhiều hơn. –

1

ghci cung cấp một số cú pháp đặc biệt để thực hiện những việc tương tự. Sử dụng let để biết định nghĩa chức năng. Tuy nhiên, nó được lưu ý trên GHC FAQ rằng nó có thể phức tạp với các chức năng phức tạp và thường tải từ một tập tin được ưa thích. Nếu bạn sử dụng một cái gì đó như Emacs cho phép tích hợp dễ dàng giữa tệp nguồn của bạn và quá trình ghci, nó sẽ trở thành một vấn đề không phải vì bạn có thể tải các định nghĩa của mình vào trình thông dịch bằng một phím tắt.

+0

Trong Emacs, có cách nào để tải một khu vực của một tập tin như trái ngược với toàn bộ tập tin? – namin

+0

Không, đây là các lệnh ghci chế độ haskell: haskell-ghci-load-file haskell-ghci-mode haskell-ghci-reload-file haskell-ghci-show-ghci-buffer haskell-ghci-start- quy trình Bạn chỉ nhận được hỗ trợ tải/tải lại. –

0

Với O'Caml và F #, các định nghĩa được tiến hành từ đầu tệp xuống. Tuy nhiên, trong Haskell, một loại hoặc hàm được xác định trước đó trong một tệp có thể tham chiếu một loại hoặc hàm sau đó trong tệp đó. Vì vậy, trong Haskell, một mô-đun cần phải được biên dịch tất cả cùng một lúc. Một vòng lặp tương tác không tương thích với việc biên dịch tất cả cùng một lúc.

2

Chế độ Haskell cho Emac cung cấp chức năng cho công việc với intepreter. Vì vậy, nếu bạn muốn chạy một số chức năng từ mô-đun mà bạn chỉnh sửa, bạn có thể sử dụng Cc Cl để tải mô-đun hiện tại sang ghci (hoặc tương tác haskell khác) và chuyển sang bộ đệm tương tác và thực hiện một số lệnh tại đó

2

Như bạn ' ve quan sát thấy, GHCi là khá hạn chế trong những gì nó có thể làm --- ngắn chức năng hoặc biểu thức là về tất cả những gì là dễ dàng tại dòng lệnh. Đối với phần còn lại tôi thấy mình tải các mô-đun. Một trong những khó khăn là Haskell không có định nghĩa trước khi sử dụng vì vậy thường khó có thể rút ra một đoạn có ý nghĩa ra khỏi tệp. Tôi thường thấy mình xác định các mô-đun nhỏ và tải và tải lại chúng. Trải nghiệm tương tác chắc chắn không đẹp như người ta thích.

0

Flymake kết hợp với Emacs Haskell Mode 2.8 hoạt động rất tốt và bạn nhận được phản hồi ngay lập tức của trình kiểm tra loại. Trong mắt tôi, nó tương tác hơn.

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