Одно допустимое использование описано в самом низу Руководства пользователя Eunit , в разделе о ленивых генераторах. Предполагается, что в этом примере кода создается очень длинный список, который будет использоваться по одному элементу за раз, поэтому вместо генерации всего списка сразу создается неправильный список, хвост которого описывает, как генерировать остальную часть списка:
lazy_test_() ->
lazy_gen(10000).
lazy_gen(N) ->
{generator,
fun () ->
if N > 0 ->
[?_test(...)
| lazy_gen(N-1)];
true ->
[]
end
end}.
Другими словами, это ленивый список, который сам Эрланг не дает.