bst :: Eq b => (a -> Skel b) -> Skel a -> Skel b
subst act = go
  where
    go = \case
      Zero          -> Zero
      Act c         -> act c
      Op op sk0 sk1 -> mkOp op (go sk0) (go sk1)


subst :: Eq b => (a -> Skel b) -> Skel a -> Skel b
subst act = go
  where
    go = \case
      Zero          -> Zero
      Act c         -> act c
      Op op sk0 sk1 -> mkOp op (go sk0) (go sk1)
subst act = go
  where
    go = \case
      Zero          -> Zero
      Act c         -> act c
      Op op sk0 sk1 -> mkOp op (go sk0) (go sk1)