Wiadomo, dla kolekcji mamy map, fold, foldr, foldl. Wiec chodzi mi wszystkie pozostałe sytuacje gdy nie pracujemy na kolekcjach
Jak chcemy wygenerować kolekcję to jest unfoldr. A nawet unfoldl dla Sequence
. W zasadzie przydałby się jeszcze unfoldl dla DList. Dziwne że go nie ma. Może jeszcze nie wszystko zrozumiałem.
Jak chcemy wyliczyć pojedynczą wartość za pomocą rekurencj to mamy loop i loopM
Czy to już jest wszystko? Widziałem kod gdzie ktoś rozmontował rekurencję na leniwą listę używając monady State. Konkretnie w intepreterze języka false. Zastanawiam się czy jeszcze jakaś opcja mi umknęła. Bo ta monada State wydaje się bardzo kusząca. zwłaszcza że walczę z problemem że często program wpada mi w nieskończaną rekurencję i zajmuje coraz więcej zasobów. W Haskellu nie ma StackOverflowException, po prostu program zjada całą pamięć. Tak mógłbym ograniczyć na potrzeby testów ilość iteracji w rekurencji i uratować się przed śmiercją GUI Linuxa
Jest jeszcze fix, ale to chyba żart. Nie widzę sytuacji gdzie miałoby to przewagę nad loop. No chyba że nie da się wszystkiego zapisać jako loop, hm