type Program<'a> = Return of 'a | Op of Op<Program<'a>>Для категорщика, поди, это очевидно (масло масляное?), но уже даже хороший функциональщик, продвинутый F#/Хаскель-практик, в таких абстракциях почти не думает.
В прикладном плане, прозрачно разделяем например "интерпретатор" от "алгебры эффектов",
хотя в новом дивном эйай-мире это уже нафиг никому никогда не сдастся...