public protocol Instantiatable { associatedtype Input associatedtype Environment associatedtype Storage var environment: Environment { get } var storage: Storage { get } init(with input: Input, environment: Environment, storage: Storage) }