Concurrent Clean : [quiz] リスト要素の正規化(2)

http://karetta.jp/article/blog/oneline/008668

maxInt =: 0x7fffffff

::Tree a = Node a [Tree a]

norm t = let (norm_t, m) = f maxInt t m in norm_t
  where
    f n (Node i ts) m = let g t (ts,n) = let (t2,n2) = f n t m in ([t2:ts], n2)
                            (ts2,n2) = foldr g ([],n) ts
                        in (Node (i / m) ts2, min i n2)

t :: Tree Int
t = Node 9 [Node 15 [], Node 12 [Node 3 [], Node 15[]], Node 27 [Node 6 [Node 18 [], Node 15 []]]]

Start = norm t