Uncompromisingly safe money library
See the codeReady to use. This is used in production at NixCI and Centjes.
| 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 | ✔️ | ✖️ | ✖️ | ? | ✖️ | ✖️ | ✖️ | ✖️ |
| Multi-accounts | ✔️ | ✖️ | ✖️ | ? | ✖️ | ✖️ | ✖️ | ✖️ |
| Addition | ✔️ | ✔️ | ✔️ | ✖️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Subtraction | ✔️ | ✔️ | ✔️ | ✖️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Negation | ✔️ | ✔️ | ✔️ | ✖️ | ✔️ | ✔️ | ✔️ | ✖️ |
| 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.)
All rights reserved. Contact me if you would like to use this library.
Haskell
96.6%
Nix
3.4%
Uncompromisingly safe money library
See the codeReady to use. This is used in production at NixCI and Centjes.
| 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 | ✔️ | ✖️ | ✖️ | ? | ✖️ | ✖️ | ✖️ | ✖️ |
| Multi-accounts | ✔️ | ✖️ | ✖️ | ? | ✖️ | ✖️ | ✖️ | ✖️ |
| Addition | ✔️ | ✔️ | ✔️ | ✖️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Subtraction | ✔️ | ✔️ | ✔️ | ✖️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Negation | ✔️ | ✔️ | ✔️ | ✖️ | ✔️ | ✔️ | ✔️ | ✖️ |
| 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.)
All rights reserved. Contact me if you would like to use this library.
Haskell
96.6%
Nix
3.4%