/really-safe-money

Uncompromisingly safe money library

Primary LanguageHaskell

Really safe money

Status

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.

Features

  • 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

Comparison

Really Safe Money Safe Money Dollaridoos Plutus values Money Simple Money
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 amounts without minimal quantisation ✔️ ✖️ ✖️ ✔️ ✖️ ✖️
No-floating-point representation ✔️ ✔️ ✖️ ✔️ ✔️
Fixed-sized representation ✔️ C ✖️ ✔️
No 'Num' instance for amounts ✔️ ✔️ ✔️
Type-errors for instances that must not exist ✔️
Multi-amounts 🚧 ✖️ ✖️ ✔️
Addition ✔️
Subtraction ✔️
Integer scalar multiplication ✔️ ✔️ ✔️
Integer division ✖️ ✖️
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.

  • ✔️: Supported
  • C: Possible but you have to write some code yourself
  • 🚧: Under development
  • ✖️: Not supported
  • ?: I don't know.

License

All rights reserved. Contact me if you would like to use this library.