skel :: (Ord a, Ord b) => Traversal (Skel a) (Skel b) a b
skel f = \case
  Zero -> pure Zero
  Act a -> Act <$> f a
  Op op sk0 sk1 -> mkOp op <$> skel f sk0 <*> skel f sk1
skel :: (Ord a, Ord b) => Traversal (Skel a) (Skel b) a b
skel f = \case
  Zero -> pure Zero
  Act a -> Act <$> f a
  Op op sk0 sk1 -> mkOp op <$> skel f sk0 <*> skel f sk1
skel f = \case
  Zero -> pure Zero
  Act a -> Act <$> f a
  Op op sk0 sk1 -> mkOp op <$> skel f sk0 <*> skel f sk1