Divergent are iteratees which never become Done state, not even when it is receiving EOF.
*Main> run $ enum diverge "abcadf" Nothing
diverge :: IterV el Int diverge = Cont step where step :: (StreamG el -> IterV el Int) step e = Cont step
run $ enum diverge "abcadf" -- This step is bound to diverge run $ enum (Cont step) "abcadf" run $ enum (step (El 'a')) "bcadf" run $ enum (Cont step) "bcadf" run $ enum (Cont step) "bcadf" run $ enum (step (El 'b')) "cadf" run $ enum (Cont step) "cadf" run $ enum (step (El 'c')) "adf" run $ enum (Cont step) "adf" run $ enum (step (El 'a')) "adf" ... run $ enum (Cont step) "f" run $ enum (step (El 'f')) [] -- Enum returns the iteratee when the feeding array becomes empty run $ (step (El 'f')) run $ Cont step -- using the secodn rule of run run' (step EOF) run' (Cont step) -- Usign the second rule of run' Nothing