1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
interface Drawable {
def draw -> String
}
interface Sink[T] {
def push(value: T) -> Nil
}
module Named {
def name -> String { "badge" }
}
class Badge {
include(Named)
def draw -> String {
"drawing " + self.name()
}
}
class StringSink {
def push(value: String) -> Nil {
print value
nil
}
}
def render(item: Drawable) -> String {
item.draw()
}
def write(sink: Sink[String]) -> Nil {
sink.push("rendered")
}
write(StringSink.new())
render(Badge.new())