領域を無駄にしない
ツリーの端のために領域が無駄になるという指摘は面白かった。こういう時にもViews
が役にたちそう。実現しそうにないけれど、個人的には非常に欲しい機能だ。
真似して
data ViewOfT = VT (VT a) a (VT a) | VE toView (N a) = VT a E E ... fromView (VT a E E) = N a ...
と関数の引数になるときに変換してもいいかもしれない。
普通なのは
data T a = E | N a | L (T a) a | R a (T a) | T (T a) a (T a) isEnd E = True; isEnd _ = False right (T _ _ r) = r right (N _) = E right (L _ _) = E ... left (T l _ _) = l
だろうけど。