types.aug
Generic dependency injection · Source and specification
Code
aug
// aug-spec: "types.aug.md" explains this file. Read it before changes; refresh with aug spec.
import Console from august.io
interface Repository<T>:
get() returns T
NumberRepository() implements Repository<int>:
get():
return 7
Program(resolve Repository<int> repository) implements IProgram:
start(resolve Console console):
console.write(value=repository.get())
interface IProgram:
start(resolve Console console) uses Console.writeaug
// aug-spec: "types.aug.md" explains this file. Read it before changes; refresh with aug spec.
import Console from august.io
interface Repository<T> {
get() returns T
}
NumberRepository() implements Repository<int> {
get() {
return 7
}
}
Program(resolve Repository<int> repository) implements IProgram {
start(resolve Console console) {
console.write(value=repository.get())
}
}
interface IProgram {
start(resolve Console console) uses Console.write
}Compiled specification
Repository · interface · source
The type parameters are T.
Repository.get · source
It returns T.
NumberRepository · class · source
It implements Repository<int>.
NumberRepository.get · source
It returns 7. source
Checked interface
text
get() returns intProgram · class · source
It implements IProgram. The repository dependency is injected as Repository<int> and stored read-only.
Program.start · source
It gets console (Console) from dependency injection. It can call Console.write. It passes repository.get to console.write. source
Checked interface
text
start(resolve Console console) returns void uses Console.writeIt gets console (Console) from dependency injection. It can call Console.write.
IProgram · interface · source
IProgram.start · source
It gets console (Console) from dependency injection. It can call Console.write.