/
Sub.flix
61 lines (52 loc) · 1.61 KB
/
Sub.flix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
* Copyright 2020 Esben Bjerre
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
///
/// A trait for subtraction.
///
pub trait Sub[a] {
///
/// Returns the difference of `x` and `y`.
///
pub def sub(x: a, y: a): a
}
instance Sub[Float32] {
pub def sub(x: Float32, y: Float32): Float32 = $FLOAT32_SUB$(x, y)
}
instance Sub[Float64] {
pub def sub(x: Float64, y: Float64): Float64 = $FLOAT64_SUB$(x, y)
}
instance Sub[BigDecimal] {
pub def sub(x: BigDecimal, y: BigDecimal): BigDecimal =
import java.math.BigDecimal.subtract(BigDecimal): BigDecimal \ {};
x `subtract` y
}
instance Sub[Int8] {
pub def sub(x: Int8, y: Int8): Int8 = $INT8_SUB$(x, y)
}
instance Sub[Int16] {
pub def sub(x: Int16, y: Int16): Int16 = $INT16_SUB$(x, y)
}
instance Sub[Int32] {
pub def sub(x: Int32, y: Int32): Int32 = $INT32_SUB$(x, y)
}
instance Sub[Int64] {
pub def sub(x: Int64, y: Int64): Int64 = $INT64_SUB$(x, y)
}
instance Sub[BigInt] {
pub def sub(x: BigInt, y: BigInt): BigInt =
import java.math.BigInteger.subtract(BigInt): BigInt \ {};
x `subtract` y
}