See README for more info
envelopes <finances.yaml | sponge finances.yaml
value objects:
- Text50
- Positive
- Id
- ShorthandNumber
- Money ignoring currency
- Money storing currency as string
state:
- Envelope (Semigroup 'x and y', (+), Monoid '' Money.mempty)
event schema & apply events:
-
Transaction
- Spending
- Refill
-
State (envelopes :: HashMap (Id Envelope) Envelope, appliedTransactions :: HashSet (Id Envelope))
-
applyTransactions :: Foldable f => State -> f Transaction -> Either TransactionError State
-
delete envelopes if it contains ~0 money
-
read & write input file
nice to have:
- Revolut export month -> events CLI
- Transaction date is an actual date
- Spending Tags is a
NonEmpty [Text50]
- CLI --from-json --to-json
- exchange currencies https://stackoverflow.com/questions/27408873/how-to-model-a-currencies-money-and-banks-that-exchange-money-between-currenci