@@ -185,6 +185,58 @@ export const prelude: ObjectNode = makeObjectNode({
185185 } ,
186186 ) ,
187187
188+ integer : makeObjectNode ( {
189+ add : preludeFunction (
190+ [ 'integer' , 'add' ] ,
191+ {
192+ parameter : types . integer ,
193+ return : makeFunctionType ( '' , {
194+ parameter : types . integer ,
195+ return : types . integer ,
196+ } ) ,
197+ } ,
198+ number2 =>
199+ either . makeRight (
200+ makeFunctionNode (
201+ {
202+ parameter : types . integer ,
203+ return : types . integer ,
204+ } ,
205+ ( ) =>
206+ either . makeRight (
207+ makeUnelaboratedObjectNode ( {
208+ 0 : '@apply' ,
209+ function : {
210+ 0 : '@lookup' ,
211+ query : { 0 : 'integer' , 1 : 'add' } ,
212+ } ,
213+ argument : number2 ,
214+ } ) ,
215+ ) ,
216+ option . none ,
217+ number1 => {
218+ if (
219+ typeof number1 !== 'string' ||
220+ ! types . integer . isAssignableFrom ( makeUnionType ( '' , [ number1 ] ) ) ||
221+ typeof number2 !== 'string' ||
222+ ! types . integer . isAssignableFrom ( makeUnionType ( '' , [ number2 ] ) )
223+ ) {
224+ return either . makeLeft ( {
225+ kind : 'panic' ,
226+ message : 'numbers must be atoms' ,
227+ } )
228+ } else {
229+ return either . makeRight (
230+ // TODO: See comment in `natural_number.add`.
231+ String ( BigInt ( number1 ) + BigInt ( number2 ) ) ,
232+ )
233+ }
234+ } ,
235+ ) ,
236+ ) ,
237+ ) ,
238+ } ) ,
239+
188240 identity : preludeFunction (
189241 [ 'identity' ] ,
190242 { parameter : A , return : A } ,
@@ -290,7 +342,7 @@ export const prelude: ObjectNode = makeObjectNode({
290342 return : types . naturalNumber ,
291343 } ) ,
292344 } ,
293- number1 =>
345+ number2 =>
294346 either . makeRight (
295347 makeFunctionNode (
296348 {
@@ -305,11 +357,11 @@ export const prelude: ObjectNode = makeObjectNode({
305357 0 : '@lookup' ,
306358 query : { 0 : 'natural_number' , 1 : 'add' } ,
307359 } ,
308- argument : number1 ,
360+ argument : number2 ,
309361 } ) ,
310362 ) ,
311363 option . none ,
312- number2 => {
364+ number1 => {
313365 if (
314366 typeof number1 !== 'string' ||
315367 ! types . naturalNumber . isAssignableFrom (
0 commit comments