私は次のタイプを持っています:
data Tree a = Empty |
Branch { key :: a,
balance :: Int8,
left :: Tree a,
right :: Tree a,
up :: Bool --used internally to stop updating balance
}
deriving (Eq)
および次のパターンに一致する関数:
roll (Branch y (-2) l (Branch ry 1 (Branch rly 0 Empty Empty _) rr _) _) = ...
Empty Empty
内部が唯一の可能な(Branch rly 0 Empty Empty _)
ケースですが、私は疑問に思っていました-フォームを次のように一般化します:
roll (Branch y 2 (Branch ly (-1) ll (Branch lry 0 lrl lrr _) _) r _) = ...
ランタイムが一致する必要がなくlrl
、?lrr
Empty