Ready to try out! This is not used in production anywhere yet, and the docs are incomplete, so try it out with the appropriate amount of caution.
- No partial functions.
- No silently incorrect functions.
- Compile errors for instances that must not exist
- Batteries included, otherwise users will write their own batteries, incorrectly
Really Safe Money | Safe Money | Dollaridoos | Plutus values | Simple Amount | Safe Decimal | Money | Simple Money | |
---|---|---|---|---|---|---|---|---|
Explicitly meant for money | ✔️ | ✔️ | ✔️ | ✔️ | ✖️ | ✖️ | ✔️ | ✔️ |
Cannot create or destroy money through errors | ✔️ | ✔️ | C | ✔️ | ✔️ | ✔️ | ✔️ | ✖️ |
No silent overflow or underflow | ✔️ | ✔️ | C | ✔️ | ✔️ | ✔️ | ✔️ | ✖️ |
Cannot represent nonsense values of money | ✔️ | ✔️ | C | ✔️ | ✖️ | C | ✔️ | ✖️ |
Computations use constant time and space | ✔️ | ✖️ | C | ✖️ | ✖️ | C | ✖️ | ✔️ |
Cannot represent amounts that are too granular | ✔️ | ✖️ | C | ✔️ | ✖️ | C | ✖️ | ✖️ |
No-floating-point representation | ✔️ | ✔️ | C | ✔️ | ✔️ | ✔️ | ✔️ | ✖️ |
Fixed-sized representation | ✔️ | ✖️ | C | ✖️ | ✖️ | C | ✖️ | ✔️ |
Amounts with type-level currency | ✔️ | ✔️ | C [1] | ✖️ | ✔️ | ✖️ | ✔️[2] | ✔️ |
Amounts without type-level currency | ✔️ | ✖️ | C | ✔️ | ✖️ | ✔️ | ✖️ | ✖️ |
A type for positive-only amounts | ✔️ | ✖️ | C | ✖️ | ✖️ | ✔️ | ✔️ | ✖️ |
A type for positive or negative amounts | ✔️ | ✔️ | C | ✔️ | ✔️ | ✔️ | ✖️ | ✔️ |
No 'Num' instance for amounts | ✔️ | ✖️ | ✖️ | ✔️ | ✖️ | ✖️ | ✖️ | ✔️ |
Type-errors for instances that must not exist | ✔️ | ✔️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
Multi-amounts | 🚧 | ✖️ | ✖️ | ✔️ | ✖️ | ✖️ | ✖️ | ✖️ |
Addition | ✔️ | ✔️ | ✔️ | ✖️ | ✔️ | ✔️ | ✔️ | ✔️ |
Subtraction | ✔️ | ✔️ | ✔️ | ✖️ | ✔️ | ✔️ | ✔️ | ✔️ |
Integer scalar multiplication | ✔️ | ✔️ | ✔️ | ✖️ | ✖️ | ✖️ | ✔️ | ✔️ |
Distribution | ✔️ | ✖️ | ✖️ | ✖️ | ✔️ | ✖️ | ✖️ | ✖️ |
Fractional multiplication | ✔️ | ✔️ | ✔️ | ✖️ | ✔️ | ✔️ | ✔️ | ✔️ |
Fractional multiplication with correct accounting | ✔️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
[1]: Dollaridoos technically supports multiple currencies, but its Show
instance always uses $
.
[2]: Money technically supports multiple currencies, but only the three that it defines.
(I will happily correct any errors in this table if you see I have made any.)
- ✔️: Supported
- C: Possible but you have to write some code yourself. This is not good enough for a money library.
- 🚧: Under development
- ✖️: Not supported
- ?: I don't know.
All rights reserved. Contact me if you would like to use this library.