領域を無駄にしない


ツリーの端のために領域が無駄になる
という指摘は面白かった。こういう時にも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

だろうけど。