+ (new-message
+ (make-message (hive-gen-message-id hive) to-id
+ (actor-id from-actor) action
+ message-body-args
+ #:wants-reply wants-reply?
+ #:in-reply-to
+ (if replying-to-message
+ (message-id replying-to-message)
+ #f))))
+ (if wants-reply?
+ (abort-to-prompt (hive-prompt (actor-hive from-actor))
+ from-actor new-message send-options)
+ ;; @@: It might be that eventually we pass in send-options
+ ;; here too. Since <-wait and <-reply-wait are the only ones
+ ;; that use it yet, for now it kind of just makes things
+ ;; confusing.
+ (8sync (hive-process-message hive new-message)))))
+
+(define (<- to-id action . message-body-args)
+ "Send a message from an actor to another actor"
+ (send-message '() (%current-actor) to-id action
+ #f #f message-body-args))
+
+(define (<-* send-options to-id action . message-body-args)
+ "Like <-*, but allows extra parameters via send-options"
+ (define* (really-send #:key (actor (%current-actor))
+ #:allow-other-keys)
+ (send-message send-options actor to-id action
+ #f #f message-body-args))
+ (apply really-send send-options))
+
+(define (<-wait to-id action . message-body-args)
+ "Send a message from an actor to another, but wait until we get a response"
+ (wait-maybe-handle-errors
+ (send-message '() (%current-actor) to-id action
+ #f #t message-body-args)))
+
+(define (<-wait* send-options to-id action . message-body-args)
+ "Like <-wait, but allows extra parameters, for example whether to
+#:accept-errors"
+ (define* (really-send #:key (actor (%current-actor))
+ #:allow-other-keys)
+ (apply wait-maybe-handle-errors
+ (send-message send-options actor to-id action
+ #f #t message-body-args)
+ send-options))
+ (apply really-send send-options))