let prelude = import! std.prelude let { (<|) } = import! std.function let { run, Test, assert_eq, test, group, ? } = import! std.test let { Applicative, (*>) } = import! std.applicative let int = import! std.int let stream @ { Stream, ? } = import! std.stream let list @ { List, ? } = import! std.list let { Option } = import! std.option let { foldl } = import! std.foldable let s = stream.from (\i -> if i < 5 then Some i else None) group "stream" [ test "fold" <| \_ -> (assert_eq (foldl (+) 0 s) 10), test "from" <| \_ -> (assert_eq s (stream.of [0, 1, 2, 3, 4])), test "map" <| \_ -> (assert_eq (stream.functor.map (\x -> x + x) s) (stream.of [0, 2, 4, 6, 8])), test "zip_with" <| \_ -> (assert_eq (stream.zip_with (+) s s) (stream.of [0, 2, 4, 6, 8])) ]