on master help sign in
Fix iterate with optimal sharing
16d8753Max New
libraries/Lazy/Stream.elm+2−3
@@ -50,9 +50,8 @@ cons' = S . lazy
50 iterate f x = S.cons x (S.cons (f x) (S.cons (f (f x)) ...))
50 iterate f x = S.cons x (S.cons (f x) (S.cons (f (f x)) ...))
51-}
51-}
52iterate : (a -> a) -> a -> Stream a
52iterate : (a -> a) -> a -> Stream a
53−iterate f x = let go = cons' <| \() ->
53+iterate f x = cons' <| \() ->
54− (x, map f go)
54+ (x, iterate f (f x))
55− in go
56
55
57{-| Create an infinite Stream of xs. -}
56{-| Create an infinite Stream of xs. -}
58repeat : a -> Stream a
57repeat : a -> Stream a