Ben örneğin, bazı basit ilkel operasyonları var: operational monadın durumundaHaskell disk "operasyonel" veya "serbest monad" devamı olarak saklanabilir mi?
:
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
Veya free monadın durumunda
: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()
Basit eylem hem de aynıdır durumlarda, örneğin:
proc1 :: Process()
proc1 = forever $ do
a <- getInput
b <- getInput
dump $ a ++ b
dump $ b ++ a
Sorum şudur: Belli adımda bir devam diske seri hale şekilde süreci (PROC1) yorumlamak mümkün mü, bir sonraki program yürütülürken restore? Bir örnek verebilir misiniz lütfen?
Mümkün değilse, en yakın çözüm ne olurdu?
sonraki girdi kullanılabilir yalnızca Programı başlatmak istiyoruzardından, devamı girişi uygulamak yanındaki "getinput" ve çıkmak kadar yorumlamak.
Ben geçmeden önce aynı duruma sistemini almak için onları tekrar ardından, tüm girdileri günlüğe senaryo hayal olabilir, ancak bu durumda, günlük sınırı olmadan büyümek istiyorum. Sürecin karşılaştırılması mümkün olmadığından (EQ örneği yok) ve süreç sınırsız olduğundan, günlüğün tercümanın içine yerleştirilmesinin hiçbir yolunu bulamadım. Gördüğüm kadarıyla
Böyle düşünmüyorum, (dağıtılmış bilgi işlem için bazı GHC özellerinin, — bunu yapabilmem mümkün olmasa da) sanmıyorum. En iyi standart yaklaşım muhtemelen, Haskell'in 'Monad' sınıfının, yorumlayabileceğiniz bazı soyut dilde işlevleri temsil eden kendi özel versiyonunuz için kolaylık ve genelliği ile ticaret yapmaktır. – dfeuer