StreamsType.scm 975 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. ;; Internal and type definitions for Streams
  2. (define-simple-class Stream (gnu.mapping.Lazy) interface: #t)
  3. (define-simple-class StreamPromise (gnu.mapping.Promise Stream)
  4. ((*init* thunk::procedure lazy::boolean)
  5. (invoke-special gnu.mapping.Promise(this) '*init* thunk)
  6. ((this):setForceValueIfPromise lazy))
  7. ((*init*)
  8. (invoke-special gnu.mapping.Promise(this) '*init*)))
  9. (define-simple-class StreamPair (gnu.lists.ImmutablePair Stream)
  10. ((*init* x y) (invoke-special gnu.lists.ImmutablePair (this) '*init* x y))
  11. ((getValue) (this)))
  12. (define-alias stream-type Stream)
  13. (define stream-null-1
  14. (let ((p (StreamPromise)))
  15. (invoke p' setValue '())
  16. p))
  17. (define-syntax stream-lazy
  18. (syntax-rules ()
  19. ((_ expr)
  20. (StreamPromise (lambda () expr) #t))))
  21. (define-syntax stream-delay
  22. (syntax-rules ()
  23. ((_ expr)
  24. (StreamPromise (lambda () expr) #f))))
  25. (define (stream-force promise)
  26. (force promise))
  27. (define (stream-eager expr)
  28. expr)