Naprawdę mam problemy ze zrozumieniem callCC. Dostaję moc kontynuacji i wykorzystałem tę koncepcję w niektórych moich projektach, aby stworzyć fajne koncepcje. Ale nigdy nie musiałem używać czegoś o większych możliwościach niż cont :: ((a->r)->r)-> Cont r a
.
Po użyciu ma sens, dlaczego nazywają Cont Monad matką wszystkich monad, JESZCZE, nie rozumiem, kiedy powinienem użyć callCC
, i to jest dokładnie moje pytanie.
reset
lub shift
. Użyłem go do zdefiniowania osadzonego języka, który można zawiesić, dopóki dana akcja nie zostanie rozwiązana przez inny proces, a następnie zostanie wznowiona z podaną „kontynuacją”. Może mam wrażenie, że mam duże doświadczenie z Cont Monad, ale nie bardzo, naprawdę chcę po prostu zrozumieć callCC
Cont
? Kiedy mówisz, że nie musiałeś używać czegoś mocniejszego niżcont
, czy to oznacza, że nie używałeśreset
czyshift
też?