// Input types are explicit; receiver and result types can be inferred.
class Cell<T> {
    let initial: T
    var value: T

    fn get() { return value }
    fn set(value: T) { self.value = value }
    fn reset() { set(initial) }
    fn preview() {
        let value = initial
        return value
    }
}

let counter = Cell<Int64>(initial: 0, value: 10)
print(counter.get())
counter.set(25)
print(counter.get())
print(counter.preview())
print(counter.get())
counter.reset()
print(counter.get())
