struct
  include Core.Std.List

  let to_stream = Stream.of_list

  let of_stream strm =
    strm
    |! Stream.fold ~init:[] ~f:(fun l a -> a::l)
    |! List.rev
end