Skip to content

Commit cda2dc1

Browse files
authored
Merge pull request #58 from mkantor/greater-than
Add `integer.greater_than` to prelude
2 parents 6dc7e3e + 79a4794 commit cda2dc1

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

src/language/semantics/stdlib/integer.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,45 @@ export const integer = {
6666
: 'false',
6767
),
6868
),
69+
greater_than: preludeFunction(
70+
['integer', 'greater_than'],
71+
{
72+
parameter: types.integer,
73+
return: makeFunctionType('', {
74+
parameter: types.integer,
75+
return: types.integer,
76+
}),
77+
},
78+
number2 =>
79+
either.makeRight(
80+
makeFunctionNode(
81+
{
82+
parameter: types.integer,
83+
return: types.boolean,
84+
},
85+
serializeOnceAppliedFunction(['integer', 'greater_than'], number2),
86+
option.none,
87+
number1 => {
88+
if (
89+
typeof number1 !== 'string' ||
90+
!types.integer.isAssignableFrom(makeUnionType('', [number1])) ||
91+
typeof number2 !== 'string' ||
92+
!types.integer.isAssignableFrom(makeUnionType('', [number2]))
93+
) {
94+
return either.makeLeft({
95+
kind: 'panic',
96+
message: 'numbers must be atoms',
97+
})
98+
} else {
99+
return either.makeRight(
100+
// TODO: See comment in `natural_number.add`.
101+
String(BigInt(number1) > BigInt(number2)),
102+
)
103+
}
104+
},
105+
),
106+
),
107+
),
69108
less_than: preludeFunction(
70109
['integer', 'less_than'],
71110
{

0 commit comments

Comments
 (0)