picks
意外につかいでがありそうだね
code:haskell
picks :: a -> [(a,a)]
picks [] = []
picks (x:xs) = (x,xs) : (y,x:ys) | (y,ys) <- picks xs
code:haskell
picks = para phi where
phi = \ case
Nil -> []
Cons x (xs,ys) -> (x,xs) : map (second (x:)) ys