git.iko.soy/rowtype-yoga/purescript-money
on master help sign in
Add UnittedSemiring instance
commitf5f27729af2a2e83a5a36fffd7e44c81b71974f0 authorrightfold <rightfold@gmail.com> dateFri 24 Mar 2017, 14:48 (10 years ago) parenta4892b0
2 files changed+8−20
bower.json+2−1 src/Data/Finance/Money.purs+6−19
bower.json+2−1
@@ -2,6 +2,7 @@
22 "name": "purescript-money",
33 "dependencies": {
44 "purescript-generics": "^3.3.0",
5− "purescript-prelude": "^2.5.0"
5+ "purescript-prelude": "^2.5.0",
6+ "purescript-unitted": "git@github.com:TinkerTravel/purescript-unitted.git#^1.0.0"
67 }
78}
src/Data/Finance/Money.purs+6−19
@@ -1,14 +1,11 @@
11module Data.Finance.Money
22 ( Discrete(..)
3− , addDiscrete, ($+)
4− , subDiscrete, ($-)
5− , mulDiscrete, ($*)
6− , divDiscrete, ($/)
73 , showDiscrete
84 ) where
95
106import Data.Finance.Currency (kind Currency, class Currency, CProxy(..), decimals)
117import Data.Generic (class Generic)
8+import Data.UnittedSemiring (class UnittedSemiring)
129import Prelude
1310
1411-- | An amount of money in the smallest discrete unit of a particular currency.
@@ -19,21 +16,11 @@ derive newtype instance eqDiscrete :: Eq (Discrete c)
1916derive newtype instance ordDiscrete :: Ord (Discrete c)
2017derive instance genericDiscrete :: Generic (Discrete c)
2118
22−addDiscrete :: ∀ c. Discrete c -> Discrete c -> Discrete c
23−addDiscrete (Discrete a) (Discrete b) = Discrete (a + b)
24−infixl 6 addDiscrete as $+
25−
26−subDiscrete :: ∀ c. Discrete c -> Discrete c -> Discrete c
27−subDiscrete (Discrete a) (Discrete b) = Discrete (a - b)
28−infixl 6 subDiscrete as $-
29−
30−mulDiscrete :: ∀ c. Discrete c -> Int -> Discrete c
31−mulDiscrete (Discrete a) b = Discrete (a * b)
32−infixl 7 mulDiscrete as $*
33−
34−divDiscrete :: ∀ c. Discrete c -> Int -> Discrete c
35−divDiscrete (Discrete a) b = Discrete (a / b)
36−infixl 7 divDiscrete as $/
19+instance unittedSemiringDiscrete :: UnittedSemiring (Discrete c) Int where
20+ uzero = Discrete 0
21+ uone = 1
22+ uadd (Discrete a) (Discrete b) = Discrete (a + b)
23+ umul (Discrete a) b = Discrete (a * b)
3724
3825showDiscrete :: ∀ c. (Currency c) => Discrete c -> String
3926showDiscrete (Discrete n) = showDiscrete' n (decimals (CProxy :: CProxy c))