やってみた 訂正: id:athos くんの指摘により。 やりたいこと 木を深さ幅優先探索して n 番目の要素を取得する。 関数型言語でならこんな風に継続渡し形式(CPS)で書けばよい: data Tree a = Tree a :*: Tree a | Leaf a nth :: Int -> Tree a -> a nth n t = nth' n t (\_ -> error "no more elements") where nth' :: Int -> Tree a -> (Int -> a) -> a nth' 0 (Leaf a) k = a nth' n (Leaf _) k = k (n-1) nth' n (l :*: r) k = nth' n l (\i -> nth' i r k) テスト *Main> nth 0 (Leaf "a") "a" *Main> nt