Genel olarak bu tutorial'u takip ederek devam etmeyi anlamaya çalışıyorum.Durum Monadının CPS sürümünde nasıl çalışır?
Ancak, bölüm 2.10 aşağıdaki örnek anlamak için güçlük çekiyorum:
# let get() =
shift (fun k -> fun state -> k state state) ;;
get : unit => ’a = <fun>
state
int
taşımaktadır. Ne anlamadığım
k
türüdür. benim anlayışıma göre,
k
tüm hesaplama
get()
sonra sonradan gelir yakalar ve bir devlet monad bahsediyoruz çünkü
k
dolayısıyla
k : int => 'a
ama bir int
alarak devam edilecektir bir hesaplama temsil etmek mantıklıdır kod, o kadar da görünmüyor ve aslında ima ikinci kez, için state
alır:
k : int => int => 'a
ama ikincisi nereden geldiğini alamadım ve hangi get
anlamda olduğunu unit => int => 'a
yerine unit => 'a
yazın?
gerçek durum tek hücreli uygulama ile karşılaştırıldığında, konfüzyon daha ekler:
newtype StateT s m a = StateT { runStateT :: s -> m (a,s) }
yani durum geçiş ilk anlayış ile eşleşen sonucu ve bir devlet tuple, devlete bir fonksiyonu olarak temsil edilir.
Herhangi biri yol gösterebilir mi?
İkinci olarak, Haskell'in Control.Monad.Trans.Cont
'u kullanarak burada get
'u nasıl uygulamalıyım? Tip sistemini rahatlatan problemler yaşıyorum.
GÜNCELLEME Ben ikinci bir tane var gibi görünüyor
:
Prelude Control.Monad.Trans.Cont> let get() = shift $ \k -> return $ \i -> k i i
Ama devamında iki kez devlet uygulamak gerekir neden hala alamadım.
@Bergi, aslında OchaCaml olarak adlandırılmaktadır. Öğreticiyi takip ediyorum ama kullanımda olan dillerin bu durumda kavramın anlaşılmasını etkilemediğini düşünmüyorum. – HuStmpHrrr