Skip to content

Commit 6bef020

Browse files
committed
refactor getExpenditure
1 parent 14ff31e commit 6bef020

File tree

2 files changed

+21
-24
lines changed

2 files changed

+21
-24
lines changed

fsharp/AddingMeaningToPrimitiveTypes/WithStaticMembers.fsx

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ type ExpenseCategory =
99

1010
type Money = Money of decimal with
1111
static member (+) (Money m1, Money m2) = Money (m1 + m2)
12+
13+
static member (~-) (Money m1) = Money -m1
1214
static member get_Zero() = Money 0m
1315
static member DivideByInt ((Money m), (x : int)) =
1416
Decimal.Divide(m, Convert.ToDecimal(x))
@@ -29,40 +31,34 @@ type Transaction =
2931
| Credit of Income
3032
| Debit of Expense
3133

32-
33-
3434
// Transaction list -> Money
3535
let balance transactions =
3636
transactions
3737
|> List.map (
3838
function
39-
| Credit x ->
40-
let (Money m) = x.Amount
41-
m
42-
| Debit y ->
43-
let (Money m) = y.Amount
44-
-m
39+
| Credit x -> x.Amount
40+
| Debit y -> -y.Amount
4541
)
4642
|> List.sum
47-
|> Money
4843

4944

50-
let rec private getExpenses' expenseCategory transactions expenses =
45+
let rec private getExpenses' transactions expenses =
5146
match transactions with
5247
| [] -> expenses
5348
| x :: xs ->
5449
match x with
55-
| Debit expense when expense.Category = expenseCategory ->
50+
| Debit expense ->
5651
(expense :: expenses)
57-
|> getExpenses' expenseCategory xs
58-
| _ -> getExpenses' expenseCategory xs expenses
52+
|> getExpenses' xs
53+
| _ -> getExpenses' xs expenses
5954

60-
let getExpenses expenseCategory transactions =
61-
getExpenses' expenseCategory transactions []
55+
let getExpenses transactions =
56+
getExpenses' transactions []
6257

6358
let getExpenditure expenseCategory transactions =
64-
getExpenses expenseCategory transactions
65-
|> List.sumBy (fun expense -> expense.Amount)
59+
getExpenses transactions
60+
|> List.filter (fun e -> e.Category = expenseCategory)
61+
|> List.sumBy (fun e -> e.Amount)
6662

6763
// ExpenseCategory -> Transaction list list -> Money
6864
let averageExpenditure expenseCategory transactionsList =

fsharp/AddingMeaningToPrimitiveTypes/WithoutStaticMembers.fsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,22 @@ let balance transactions =
4040
|> Money
4141

4242

43-
let rec private getExpenses' expenseCategory transactions expenses =
43+
let rec private getExpenses' transactions expenses =
4444
match transactions with
4545
| [] -> expenses
4646
| x :: xs ->
4747
match x with
48-
| Debit expense when expense.Category = expenseCategory ->
48+
| Debit expense ->
4949
(expense :: expenses)
50-
|> getExpenses' expenseCategory xs
51-
| _ -> getExpenses' expenseCategory xs expenses
50+
|> getExpenses' xs
51+
| _ -> getExpenses' xs expenses
5252

53-
let getExpenses expenseCategory transactions =
54-
getExpenses' expenseCategory transactions []
53+
let getExpenses transactions =
54+
getExpenses' transactions []
5555

5656
let getExpenditure expenseCategory transactions =
57-
getExpenses expenseCategory transactions
57+
getExpenses transactions
58+
|> List.filter (fun e -> e.Category = expenseCategory)
5859
|> List.map (fun expense ->
5960
let (Money m) = expense.Amount
6061
m

0 commit comments

Comments
 (0)