Skip to content

Latest commit

 

History

History
123 lines (99 loc) · 5.2 KB

File metadata and controls

123 lines (99 loc) · 5.2 KB

Cats-Money

Scala functional library to deal amounts of money. The goal is to provide basic mathematical reasoning to work in money currency and exchange rate.

See the Documentation website https://fabiopinheiro.github.io/cats-money/

Build Status Codacy Badge Codacy Badge

Power by cats & shapeless:

Cats Friendly Badge & &

Getting Started with Gitpod

Open in Gitpod

To use the online IDE dondload and install the Visual Studio plugins from the marketplace:

To compile and run you can install scala and sbt: sdk install scala & sdk install sbt

Getting Started locally

You will need to have Git, Java 8, and SBT installed.

We try to have a similar structure to the cats library. Have a look of the Cats Infographic from tpolecat and to the Underscore's Scala Book.

You can also start a Scala console from in SBT (scala> prompt) to play with small snippets of code:

import cats._, implicits._
import shapeless._, record._, union._, syntax.singleton._
import app.fmgp.money.instances.all._

import app.fmgp.money._
import app.fmgp.money.MoneyY._
import app.fmgp.money.CurrencyY._

Have a look on the to Demos for more examples (on the test folder):

  • sbt "test:runMain app.fmgp.money.Demo"
  • sbt "test:runMain app.fmgp.money.Main"

Adopters

This is still only a draft and experimental library. But I plane to use this on the near future. If anyone else is also looking for a functional approach to work with monetary value, send me a messagem. (I would appreciate example use cases to better reflect over the library.)

Maintainers

The current maintainers (people who can merge pull requests) are:

TODO LIST

  • implement:
  • rename classes and draw a UML
    • rename MoneyY and CurrencyY files
    • rename MoneyY to Money.
    • move all the other Money type to other place (like 'experimental' package)
  • currency
    • add all currencies from ISO-4217
    • create subset type of currencies
      • [-] try shapeless Union type
        type U = Union.`'a -> EUR, 'b -> USD`.T
        val u1 = Coproduct[U]('a ->> EUR)
        println("u1", u1)
      • try Dotty Union Types =)
    • implement the rates conversion on a subset of currencies
      • [-] try shapeless polymorphic function
        object polymorphicF extends Poly1 {
          implicit def caseEUR = at[EUR.type](i => "sEUR")
          implicit def caseSUSD = at[USD.type](s => "sUSD")
        }
        type CU = EUR.type :+: USD.type :+: CNil
        val cu = Coproduct[CU](USD)
        println("cu", cu, cu map polymorphicF)
  • tests:
  • demo:
    • [WIP] (+- Done) Demo Main
  • to try:
    • Epimorphism, Monomorphism and Isomorphism
    • Rings +-

Copyright and License

cats-money is licensed under the MIT license, available at http://opensource.org/licenses/mit-license.php and also in the LICENSE file.

Copyright the Fabio Pinheiro, 2020.