-
Notifications
You must be signed in to change notification settings - Fork 50
Closed
Description
Hi,
the default scanl is implemented with the Traversable instance of the Lazy List and does not terminate when having an infinite list.
import Data.List.Lazy as List
-- Will not terminate even though "Lazy" may indicates the opposite
foo :: Maybe Int
foo = List.head $ scanl (+) 0 $ List.cycle $ List.fromFoldable [1, 2, 3]Should the Lazy List have a specialized scanl ?
E.g.
scanl :: forall a b. (b -> a -> b) -> b -> List a -> List b
scanl f init list = List $ defer \_ -> case List.step list of
List.Nil -> List.Nil
List.Cons head tail ->
let val = f init head in
List.Cons val (scanl f val tail)garyb
Metadata
Metadata
Assignees
Labels
No labels