NorfairKing/really-safe-money

Uncompromisingly safe money library

Haskell

62

0 commits

updated Jul 26, 2026

See the code

README

Really safe money

NixCI

Status

Ready to use. This is used in production at NixCI and Centjes.

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 MoneySafe MoneyDollaridoosPlutus valuesSimple AmountSafe DecimalMoneySimple 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.)

  • ✔️: 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.

License

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

NorfairKing/really-safe-money

Uncompromisingly safe money library

Haskell

62

0 commits

updated Jul 26, 2026

See the code

README

Really safe money

NixCI

Status

Ready to use. This is used in production at NixCI and Centjes.

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 MoneySafe MoneyDollaridoosPlutus valuesSimple AmountSafe DecimalMoneySimple 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.)

  • ✔️: 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.

License

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

Languages

Haskell

96.6%

Nix

3.4%