-- -- Examples for use with LambdaNu -- imap f xs = begin (new (\t -> assign t xs >> let loop = deref t >>= \ys -> case ys of (y:ys') -> out (f y :) >> assign t ys' >> loop [] -> outConst [] in loop)) imap' f xs = newvar >>= \t -> assign t xs >> let loop = t ? \ys -> case ys of (z:zs) -> out (f z :) >> assign t zs >> loop [] -> outConst [] in loop ones = 1:ones test1 = imap (+1) [1,2,3] test2 = imap (+1) ones funny x = begin (new (\t -> assign t x >> deref t >>= \x' -> outConst x')) funny' x y = begin (new (\t -> (new (\s -> assign t x >> assign s y >> deref t >>= \x' -> deref s >>= \y' -> outConst (x',y'))))) double xs = begin (new (\t -> assign t xs >> let loop = deref t >>= \zs -> case zs of (y:ys) -> out (\zs -> y:y:zs) >> assign t ys >> loop [] -> out (const []) in loop)) double' xs = begin (let loop (y:ys) = out (\zs -> y:y:zs) >> loop ys loop [] = out (const []) in loop xs) double'' (y:ys) = y : y : double'' ys double'' [] = []