2013-04-16 32 views
8

Giả sử như sau:Truyền chức năng qua mạng trong Haskell

Tôi có loại được gọi là World đại diện cho một số trạng thái mô phỏng. Tôi cũng có loại từ đồng nghĩa này:

type Update = World -> World 

Haskell có khả năng tuần tự hóa loại cập nhật để nó có thể được truyền qua mạng không? Hay có phương tiện nào khác để làm như vậy? Có lẽ tôi không tìm kiếm một serialization của logic của mã rất nhiều, như một số loại con trỏ hoặc định danh có thể được đọc ở đầu bên kia. Cả quá trình gửi và nhận đang chạy cùng một chương trình Haskell.

+10

Bạn nên xem xét 'cloud haskell' mà về cơ bản là một hệ thống truyền con trỏ đến các hàm giả sử mỗi bên có một tệp nhị phân trùng khớp. –

+2

Cân nhắc tạo cấu trúc dữ liệu 'dữ liệu Sự kiện = Thing | Thing2 Int | ... 'đại diện cho các sự kiện nguyên tử có thể xảy ra, sau đó một hàm' update :: Event -> World -> World'. Bạn có thể tuần tự hóa dữ liệu đơn giản 'Sự kiện' loại và vượt qua xung quanh (và thêm đăng nhập vv nếu bạn thích) và sau đó sử dụng chức năng' update' ở mỗi đầu của kết nối mạng. – AndrewC

+1

Đáng buồn thay, nói chung câu trả lời là không. – augustss

Trả lời

12

Gói chính xác là những gì bạn mô tả. Vì mỗi chương trình đã có cùng một tập hợp các hàm, một con trỏ trỏ tới hàm được truyền từ một tiến trình này sang tiến trình khác. Đã có đề cập đến việc tuần tự hóa chức năng như một mục tiêu tiềm năng trong tương lai nhưng có vẻ như nó có thể thay đổi GHC. Các github page là một nguồn lực tốt cho những gì backends tồn tại. Các github-pages trông rất đẹp với một số ví dụ, nhưng tôi không biết về nó cho đến một thời điểm trước đây.

Một vài lần tiêu hóa Haskell song song xung quanh issue 11 là nơi tôi nhớ được nhiều nhất. Chắc chắn mất chút thời gian để khám phá github-pages Tôi biết tôi sẽ tham gia.

Nếu tôi nhớ chính xác có những ví dụ đơn giản trong gói hackage hoặc trên repo github khám phá việc đánh cắp công việc so với chia sẻ công việc và các chiến lược tương tự.

+4

Đối với tò mò: 'quá trình phân tán' là hiện thân của Cloud Haskell. Chính xác là tại sao họ đổi tên tôi không biết, nhưng nó có lẽ là tốt nhất. –

3

Tôi khuyên bạn nên tạo cấu trúc dữ liệu DSL. Đáng buồn thay Haskell không có tính năng biên dịch thời gian chạy của lisp, nhưng nó phải là đủ.

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