Tôi có một số hoạt động nguyên thủy đơn giản, ví dụ:Có thể lưu trữ haskell "hoạt động" hoặc "đơn nguyên miễn phí" tiếp tục vào đĩa không?
Trong trường hợp operational đơn nguyên:
import Control.Monad.Operational
type Process a = Program ProcessI a
data ProcessI a where
GetInput :: ProcessI String
Dump :: String -> ProcessI()
getInput :: Process String
getInput = singleton GetInput
dump :: String -> Process()
dump = singleton . Dump
Hoặc trong trường hợp free đơn nguyên:
import Control.Monad.Free
type Process = Free ProcessF
data ProcessF a
= GetInput (String -> a)
| Dump String a
deriving (Functor)
getInput :: Process String
getInput = liftF $ GetInput id
dump :: String -> Process()
dump s = liftF $ Dump s()
hành động đơn giản là như nhau trong cả hai trường hợp, ví dụ:
proc1 :: Process()
proc1 = forever $ do
a <- getInput
b <- getInput
dump $ a ++ b
dump $ b ++ a
Câu hỏi của tôi là: Có thể diễn giải quá trình (proc1) theo cách mà việc tiếp tục trong một số bước nhất định được tuần tự hóa vào đĩa, sau đó được khôi phục trong quá trình thực thi chương trình tiếp theo? Bạn có thể vui lòng đưa ra một ví dụ?
Nếu không thể, giải pháp khắc phục gần nhất sẽ là gì?
Tôi muốn bắt đầu chương trình chỉ khi có đầu vào tiếp theo, áp dụng tiếp tục đầu vào, sau đó diễn giải cho đến khi "getInput" tiếp theo và thoát.
Tôi có thể tưởng tượng kịch bản để ghi lại tất cả các đầu vào, sau đó phát lại chúng để đưa hệ thống về trạng thái tương tự trước khi tiếp tục, nhưng trong trường hợp này, nhật ký sẽ phát triển không có giới hạn. Tôi không thể tìm thấy bất kỳ cách nào để campact đăng nhập trong thông dịch viên vì không có khả năng để so sánh tiếp tục (không có trường hợp EQ) và quá trình này là vô hạn.
Không phải như vậy, tôi không nghĩ (mặc dù có thể một số đặc biệt GHC cho máy tính phân tán có thể làm được điều đó — Tôi chưa bao giờ đào sâu vào những thứ đó). Cách tiếp cận tiêu chuẩn tốt nhất có lẽ là trao đổi sự tiện lợi và tính tổng quát của lớp 'Monad' của Haskell cho phiên bản tùy chỉnh của riêng bạn đại diện cho các hàm trong một số ngôn ngữ trừu tượng mà bạn có thể giải thích. – dfeuer