Rangeも再帰する
[]using[] []namespace[] []pstade[][]::[][]oven[][];[]
[]typedef[]
[]any_range[][]<[][]int[][], [][]boost[][]::[][]single_pass_traversal_tag[][]>[]
[]range[][];[]
[]int[] []main[][]()[]
[]{[]
[]int[] []const[] []one[][] = [][]1[][];[][]range[] []fibs[][];[]
[]fibs[][] =[]
[]as_single[][]([][]one[][])|[][]appended[][]([][]one[][])|[][]transformed[][]([][]pstade[][]::[][]as_value[][])|[]
[]jointed[][]([]
[]pstade[][]::[][]pack[][]([][]recursion[][]([][]fibs[][]), [][]recursion[][]([][]fibs[][])|[][]dropped[][]([][]1[][]))|[]
[]zipped_with[][]([][]regular[][]([][]lambda[][]::[][]_1[][] + [][]lambda[][]::[][]_2[][]))[]
[] )[]
[] ;[][]std[][]::[][]cout[][] << ([][]fibs[][]|[][]taken[][]([][]20[][]));[]
[]}[]