Concurrent Clean : Finger trees : 正格リスト

Finger treeの定義は、次のようにしていたのだけれど、

:: Tree v a
    = Empty
    | Single !a
    | Deep v !(Digit a) (Tree v (Node v a)) !(Digit a)
:: Digit a :== [a]

Digitの所が遅延リストだったので、不必要な非正格性が残ってしまっていた。そこで、正格リストを使って書き直してみた。

:: Digit a :== [!a!]

結構修正個所が多かった。