apoL'を使ってinsertを定義する
-- 3.14
apoL' :: (b -> Maybe (a, Either b (List a))) -> b -> List a
apoL' f u = case f u of
Nothing -> Nil
Just (x, Left v) -> Cons x (apoL' f v)
Just (x, Right xs) -> Cons x xs
insert3 = apoL' step u
where
step Nil = Nothing
step (Cons x xs) = if x < u then Just (x, Left xs) else Just (x, Right xs)
とやると
Not in scope: `u'
と言われるが理由がわからん。
疲れたので、今日はもう読むのをやめよう。