type BankAccount(initialSold : float, Owner : string) =
let TransactHistory : string [] = null
member val Sold = initialSold with get, set
member this.Owner = Owner
member this.DoTransaction(t : TransactionType) =
match t with
| Deposit amount -> this.Sold <- (this.Sold + amount)
| Withdraw amount -> this.Sold <- (this.Sold - amount)
| Transfer (target, amount) -> this.Sold <- (this.Sold - amount); target.Sold <- (target.Sold + amount)
override this.ToString() =
this.Owner + " has " + this.Sold.ToString() + " $."
and TransactionType =
| Deposit of float
| Withdraw of float
| Transfer of BankAccount * float
let one = BankAccount(12.0,"First")
one |> printfn "%A"
one.DoTransaction (Deposit(2.0))
one.DoTransaction (Withdraw(3.0))
one |> printfn "%A"
dHlwZSBCYW5rQWNjb3VudChpbml0aWFsU29sZCA6IGZsb2F0LCBPd25lciA6IHN0cmluZykgID0gCiAgICBsZXQgVHJhbnNhY3RIaXN0b3J5IDogc3RyaW5nIFtdID0gbnVsbAogICAgbWVtYmVyIHZhbCBTb2xkID0gaW5pdGlhbFNvbGQgd2l0aCBnZXQsIHNldAogICAgbWVtYmVyIHRoaXMuT3duZXIgPSBPd25lcgogICAgbWVtYmVyIHRoaXMuRG9UcmFuc2FjdGlvbih0IDogVHJhbnNhY3Rpb25UeXBlKSA9CiAgICAgICAgbWF0Y2ggdCB3aXRoCiAgICAgICAgfCBEZXBvc2l0IGFtb3VudCAtPiB0aGlzLlNvbGQgPC0gKHRoaXMuU29sZCArIGFtb3VudCkKICAgICAgICB8IFdpdGhkcmF3IGFtb3VudCAtPiB0aGlzLlNvbGQgPC0gKHRoaXMuU29sZCAtIGFtb3VudCkKICAgICAgICB8IFRyYW5zZmVyICh0YXJnZXQsIGFtb3VudCkgLT4gdGhpcy5Tb2xkIDwtICh0aGlzLlNvbGQgLSBhbW91bnQpOyB0YXJnZXQuU29sZCA8LSAodGFyZ2V0LlNvbGQgKyBhbW91bnQpCgogICAgb3ZlcnJpZGUgdGhpcy5Ub1N0cmluZygpID0gCiAgICAgICAgdGhpcy5Pd25lciArICIgaGFzICIgKyB0aGlzLlNvbGQuVG9TdHJpbmcoKSArICIgJC4iCgphbmQgVHJhbnNhY3Rpb25UeXBlID0KfCBEZXBvc2l0IG9mIGZsb2F0CnwgV2l0aGRyYXcgb2YgZmxvYXQKfCBUcmFuc2ZlciBvZiBCYW5rQWNjb3VudCAqIGZsb2F0CgogICAgCmxldCBvbmUgPSBCYW5rQWNjb3VudCgxMi4wLCJGaXJzdCIpCm9uZSB8PiBwcmludGZuICIlQSIKb25lLkRvVHJhbnNhY3Rpb24gKERlcG9zaXQoMi4wKSkgCm9uZS5Eb1RyYW5zYWN0aW9uIChXaXRoZHJhdygzLjApKSAKCm9uZSB8PiBwcmludGZuICIlQSI=