Skip to content

Commit 608d247

Browse files
imacgsharkdp
authored andcommitted
Allow non-scalar arguments to atan2 when dimensions match
1 parent 78a1445 commit 608d247

1 file changed

Lines changed: 11 additions & 21 deletions

File tree

src/Data/Quantity/Math.purs

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,13 @@ lift fn q = (scalar' <<< fn) <$> toScalar' q
5252
lift2 (Decimal Decimal Decimal) Quantity Quantity Result
5353
lift2 fn q1 q2 = scalar' <$> (fn <$> toScalar' q1 <*> toScalar' q2)
5454

55+
lift2' (Decimal Decimal Decimal) Quantity Quantity Result
56+
lift2' f q1 q2 = do
57+
let u = derivedUnit q1
58+
v1 ← q1 `asValueIn'` u
59+
v2 ← q2 `asValueIn'` u
60+
pure $ quantity' (f v1 v2) u
61+
5562
acos Quantity Result
5663
acos = lift Decimal.acos
5764

@@ -62,7 +69,7 @@ atan ∷ Quantity → Result
6269
atan = lift Decimal.atan
6370

6471
atan2 Quantity Quantity Result
65-
atan2 = lift2 Decimal.atan2
72+
atan2 = lift2' Decimal.atan2
6673

6774
cos Quantity Result
6875
cos = lift Decimal.cos
@@ -107,25 +114,13 @@ log10 ∷ Quantity → Result
107114
log10 = lift Decimal.log10
108115

109116
max2 Quantity Quantity Result
110-
max2 q1 q2 = do
111-
let u1 = derivedUnit q1
112-
v1 ← q1 `asValueIn'` u1
113-
v2 ← q2 `asValueIn'` u1
114-
if v1 >= v2
115-
then pure q1
116-
else pure q2
117+
max2 = lift2' Decimal.max
117118

118119
max NonEmptyList Quantity Result
119120
max xs = foldM max2 (head xs) (tail xs)
120121

121122
min2 Quantity Quantity Result
122-
min2 q1 q2 = do
123-
let u1 = derivedUnit q1
124-
v1 ← q1 `asValueIn'` u1
125-
v2 ← q2 `asValueIn'` u1
126-
if v1 <= v2
127-
then pure q1
128-
else pure q2
123+
min2 = lift2' Decimal.min
129124

130125
min NonEmptyList Quantity Result
131126
min xs = foldM min2 (head xs) (tail xs)
@@ -136,12 +131,7 @@ mean xs = (_ ⊘ n) <$> foldM (⊕) (head xs) (tail xs)
136131
n = scalar' (Decimal.fromInt (length xs))
137132

138133
modulo Quantity Quantity Result
139-
modulo q1 q2 = do
140-
let u = derivedUnit q1
141-
v1 ← q1 `asValueIn'` u
142-
v2 ← q2 `asValueIn'` u
143-
let res = v1 `Decimal.modulo` v2
144-
pure (quantity' res u)
134+
modulo = lift2' Decimal.modulo
145135

146136
round Quantity Result
147137
round = lift Decimal.round

0 commit comments

Comments
 (0)