Current section
Files
Jump to
Current section
Files
src/message.gleam
import gleam_value.{GloomObject}
pub type GloomMessage {
UnaryMessage(selector: String)
BinaryMessage(selector: String, argument: GloomObject)
NamedMessage(arguments: GloomObject)
Noop
}
pub type MessageSend {
MessageSend(recipient: GloomObject, message: GloomMessage)
}
// every computation with an everything object is inplace
// something objects can be modified, but only explicitly
// nothing objects are no-op. they are the only truly safe objects.
//
// everything something nothing
// everything everything everything nothing
// something everything something nothing
// nothing nothing nothing nothing
// nothing > everything > something
// [0, 1, 2, 3, 4, 5, 6, 7, 8]
//
// :set x :to 1.
// x + 2. // x is now equal to 3
// x :become Something.
// x + 2. // x is still 3.
// :set x :to x + 2. // x is now 5
// x :become Nothing.
// :set x :to x + 5. // x is still 5
// x :print. // nothing happens
//pub fn set_affinities(new_affinity: GloomAffinity, message_send: MessageSend) {
// let MessageSend(recipient, message) = message_send
// case message {
// UnaryMessage(_) -> message_send
// BinaryMessage(_, argument) -> {
// MessageSend(
// recipient: GloomObject(..recipient, affinity: new_affinity),
// message: GloomObject(..argument, affinity: new_affinity),
// )
// }
//} }
//pub fn dominant_affinity(message_send: MessageSend) {
// let MessageSend(recipient, message) = message_send
// case message {
// UnaryMessage(_) -> message_send
// BinaryMessage(_, argument) -> {
// let max_affinity = affinity_max(recipient.affinity, argument.affinity)
// MessageSend(
// recipient: GloomObject(..recipient, affinity: max_affinity),
// message: GloomObject(..argument, affinity: max_affinity),
// )
// }
// NamedMessage(arguments)
// }
//}