This file is indexed.

/usr/share/scheme48-1.9/srfi/packages.scm is in scheme48 1.9-5.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
; Part of Scheme 48 1.9.  See file COPYING for notices and license.

; Authors: Richard Kelsey, Jonathan Rees, Mike Sperber, David van Horn,
; Martin Gasbichler, Michael Zabka, Emilio Lopes

;----------------
; SRFI packages

; SRFI-0 - Doesn't work with the module system.

; Olin's list library.

(define-interface srfi-1-interface
  (export map for-each member assoc	; redefined from R5RS
	  xcons make-list list-tabulate cons* list-copy 
	  proper-list? circular-list? dotted-list? not-pair? null-list? list=
	  circular-list length+
	  iota
	  first second third fourth fifth sixth seventh eighth ninth tenth
	  car+cdr
	  take       drop       
	  take-right drop-right 
	  take!      drop-right!
	  split-at   split-at!
	  last last-pair
	  zip unzip1 unzip2 unzip3 unzip4 unzip5
	  count
	  append! append-reverse append-reverse! concatenate concatenate! 
	  unfold       fold       pair-fold       reduce
	  unfold-right fold-right pair-fold-right reduce-right
	  append-map append-map! map! pair-for-each filter-map map-in-order
	  filter  partition  remove
	  filter! partition! remove! 
	  find find-tail any every list-index
	  take-while drop-while take-while!
	  span break span! break!
	  delete delete!
	  alist-cons alist-copy
	  delete-duplicates delete-duplicates!
	  alist-delete alist-delete!
	  reverse! 
	  lset<= lset= lset-adjoin  
	  lset-union  lset-intersection  lset-difference  lset-xor
	  lset-diff+intersection
	  lset-union! lset-intersection! lset-difference! lset-xor!
	  lset-diff+intersection!))

(define-structure srfi-1 srfi-1-interface
  (open (modify scheme-level-2 (hide map for-each member assoc)) ; redefined
	receiving
	(subset exceptions (assertion-violation)))
  (files srfi-1))

; AND-LET*: an AND with local bindings, a guarded LET* special form

(define-structure srfi-2 (export (and-let* :syntax))
  (open scheme-level-2
	exceptions)		; error
  (files srfi-2))

; SRFI-3 - withdrawn

; SRFI 4: Homogeneous numeric vector datatypes
; Does not include hacks to the reader (intentionally).

(define-interface srfi-4-interface
  (export
   s8vector? make-s8vector s8vector s8vector-length
   s8vector-ref s8vector-set! s8vector->list list->s8vector
   u8vector? make-u8vector u8vector u8vector-length
   u8vector-ref u8vector-set! u8vector->list list->u8vector
   s16vector? make-s16vector s16vector s16vector-length
   s16vector-ref s16vector-set! s16vector->list list->s16vector
   u16vector? make-u16vector u16vector u16vector-length
   u16vector-ref u16vector-set! u16vector->list list->u16vector
   s32vector? make-s32vector s32vector s32vector-length
   s32vector-ref s32vector-set! s32vector->list list->s32vector
   u32vector? make-u32vector u32vector u32vector-length
   u32vector-ref u32vector-set! u32vector->list list->u32vector
   s64vector? make-s64vector s64vector s64vector-length
   s64vector-ref s64vector-set! s64vector->list list->s64vector
   u64vector? make-u64vector u64vector u64vector-length u64vector-ref
   u64vector-set! u64vector->list list->u64vector
   f32vector? make-f32vector f32vector f32vector-length f32vector-ref
   f32vector-set! f32vector->list list->f32vector
   f64vector? make-f64vector f64vector f64vector-length f64vector-ref
   f64vector-set! f64vector->list list->f64vector   
   ))

(define-structure srfi-4 srfi-4-interface
  (open scheme define-record-types 
	srfi-16 ; case-lambda
	srfi-60 ; Integers as Bits
	(modify srfi-66 ; Octet vectors
		(rename (make-u8vector srfi-66:make-u8vector)))
	srfi-74 ; blobs
	(subset big-util (no-op)))
  (files srfi-4))


; A compatible let form with signatures and rest arguments

(define-structure srfi-5 (export (let :syntax))
  (open (modify scheme-level-2 (rename (let standard-let))))
  (files srfi-5))

; Basic String Ports

(define-structure srfi-6 (export open-input-string
				 open-output-string
				 get-output-string)
  (open (modify extended-ports
		(rename (make-string-input-port    open-input-string)
			(make-string-output-port   open-output-string)
			(string-output-port-output get-output-string)))))

; Configuration language

(define-structure srfi-7 (export program)	; also defines a command
  (open scheme

	; for parsing programs
	receiving
	nondeterminism
	(subset exceptions (assertion-violation))

	(subset evaluation			(eval-from-file))

	(subset package-commands-internal	(config-package))
	ensures-loaded
	(subset packages			(note-structure-name!))

	; for defining the command
	(subset command-processor		(define-user-command-syntax
						 user-command-environment))
	(subset environments			(environment-define! environment-ref))
        
        ; for opening needed packages during evaluation
        (subset package-mutation                (package-open!))
        (subset packages                        (make-modified-structure)))

  (begin
    (define available-srfis
      '(srfi-1 srfi-2 srfi-4 srfi-5 srfi-6 srfi-7 srfi-8 srfi-9
	srfi-11 srfi-13 srfi-14 srfi-16 srfi-17 srfi-19
	srfi-23 srfi-25 srfi-26 srfi-27 srfi-28
	srfi-31 srfi-34 srfi-37
	srfi-39 srfi-40 srfi-42 srfi-43 srfi-45
        srfi-60 srfi-61 srfi-62 srfi-63 srfi-66 srfi-67
	srfi-71 srfi-74 srfi-78
	srfi-95))

    ; Some SRFI's redefine Scheme variables.
    (define shadowed
      '((srfi-1 map for-each member assoc)
	(srfi-5 let)
	(srfi-13 string->list string-copy string-fill!)
	(srfi-17 set!)
	(srfi-45 force delay)
	(srfi-43 vector-fill! vector->list list->vector)
        (srfi-61 cond)
        (srfi-63 equal?)
        (srfi-71 let let* letrec)))
    )
  
  (files srfi-7))

; receive: Binding to multiple values
; Identical to the version in UTIL

(define-structure srfi-8 (export (receive :syntax))
  (open scheme-level-2
	util))

; Defining Record Types
; SRFI-9 is a slight modification of DEFINE-RECORD-TYPE.

(define-structure srfi-9 (export (define-record-type :syntax))
  (open scheme-level-2 
	(with-prefix define-record-types sys:))
  (begin
    (define-syntax define-record-type
      (syntax-rules ()
	((define-record-type type-name . stuff)
	 (sys:define-record-type type-name type-name . stuff))))))

; SRFI-10 - no stand-alone interface.

; Syntax for receiving multiple values

(define-structure srfi-11 (export (let-values :syntax)
				  (let*-values :syntax))
  (open scheme-level-2)
  (files srfi-11))

; SRFI-12 - withdrawn

; Two more encyclopedias from Olin.

; String Library

(define-interface srfi-13-interface
  (export string-map string-map!
	  string-fold       string-unfold
	  string-fold-right string-unfold-right 
	  string-tabulate string-for-each string-for-each-index
	  string-every string-any
	  string-hash string-hash-ci
	  string-compare string-compare-ci
	  string=    string<    string>    string<=    string>=    string<>
	  string-ci= string-ci< string-ci> string-ci<= string-ci>= string-ci<> 
	  string-downcase  string-upcase  string-titlecase  
	  string-downcase! string-upcase! string-titlecase! 
	  string-take string-take-right
	  string-drop string-drop-right
	  string-pad string-pad-right
	  string-trim string-trim-right string-trim-both
	  string-filter string-delete
	  string-index string-index-right 
	  string-skip  string-skip-right
	  string-count
	  string-prefix-length string-prefix-length-ci
	  string-suffix-length string-suffix-length-ci
	  string-prefix? string-prefix-ci?
	  string-suffix? string-suffix-ci?
	  string-contains string-contains-ci
	  string-copy! substring/shared
	  string-reverse string-reverse! reverse-list->string
	  string-concatenate
	  string-concatenate/shared
	  string-concatenate-reverse
	  string-concatenate-reverse/shared
	  string-append/shared
	  xsubstring string-xcopy!
	  string-null?
	  string-join
	  string-tokenize
	  string-replace

	  string->list string-copy string-fill! 
	  string? make-string string-length string-ref string-set! 
	  string string-append list->string))

(define-structure srfi-13 srfi-13-interface
  (open (modify scheme-level-2
		(hide string-copy string-upcase string-downcase string-titlecase string-fill! string->list))
	bitwise
	srfi-8 srfi-14
	(modify unicode-char-maps
		(hide string-upcase string-downcase string-titlecase))
	(subset exceptions (assertion-violation)))
  (files srfi-13))

; Character-Set Library

(define-interface srfi-14-interface
  (export char-set? char-set=
	  char-set<= char-set-hash char-set-cursor char-set-ref
	  char-set-cursor-next end-of-char-set? char-set-fold char-set-unfold
	  char-set-unfold!  char-set-for-each char-set-map char-set-copy
	  char-set

	  list->char-set  string->char-set 
	  list->char-set! string->char-set! 

	  char-set-filter  ucs-range->char-set

	  ; the SRFI defines ->CHAR-SET, but that isn't a legal identifier
	  x->char-set
	  
	  char-set-filter! ucs-range->char-set!

	  char-set->list char-set->string

	  char-set-size char-set-count char-set-contains?
	  char-set-every char-set-any

	  char-set-adjoin  char-set-delete 
	  char-set-adjoin! char-set-delete!
 

	  char-set-complement  char-set-union  char-set-intersection  
	  char-set-complement! char-set-union! char-set-intersection! 

	  char-set-difference  char-set-xor  char-set-diff+intersection
	  char-set-difference! char-set-xor! char-set-diff+intersection!

	  char-set:lower-case	char-set:upper-case	char-set:title-case
	  char-set:letter	char-set:digit		char-set:letter+digit
	  char-set:graphic	char-set:printing	char-set:whitespace
	  char-set:iso-control	char-set:punctuation	char-set:symbol
	  char-set:hex-digit	char-set:blank		char-set:ascii
	  char-set:empty	char-set:full

	  ))

(define-structure srfi-14 srfi-14-interface
  (open scheme-level-2
	bitwise
	unicode
	byte-vectors
	(subset primitives (copy-bytes! unspecific))
	inversion-lists
	srfi-9
	(subset define-record-types (define-record-discloser))
	variable-argument-lists
	(subset big-util (partition-list))
	(subset features (make-immutable!))
	(subset exceptions (assertion-violation)))
  (optimize auto-integrate)
  (files srfi-14
	 srfi-14-base-char-sets ; auto-generated
	 srfi-14-char-sets))

; SRFI-15 - withdrawn

; Syntax for procedures of variable arity

(define-structure srfi-16 (export (case-lambda :syntax))
  (open scheme-level-2
	(subset exceptions (assertion-violation)))
  (files srfi-16))

; Generalized set!

(define-structure srfi-17 (export (set! :syntax) setter)
  (open (modify scheme-level-2 (rename (set! scheme-set!)))
	(subset exceptions (assertion-violation))
	(subset util (unspecific)))
  (files srfi-17))

; SRFI-18 - no implementation given

(define-interface srfi-19-interface
  (export 
   ;; Constants
   time-duration
   time-monotonic
   time-process
   time-tai
   time-thread
   time-utc
   ;; Current time and clock resolution
   current-date
   current-julian-day
   current-modified-julian-day
   current-time
   time-resolution
   ;; Time object and accessors
   make-time
   time?
   time-type
   time-nanosecond
   time-second
   set-time-type!
   set-time-nanosecond!
   set-time-second!
   copy-time
   ;; Time comparison procedures
   time<=?
   time<?
   time=?
   time>=?
   time>?
   ;; Time arithmetic procedures
   time-difference
   time-difference!
   add-duration
   add-duration!
   subtract-duration
   subtract-duration!
   ;; Date object and accessors
   make-date
   date?
   date-nanosecond
   date-second
   date-minute
   date-hour
   date-day
   date-month
   date-year
   date-zone-offset
   date-year-day
   date-week-day
   date-week-number
   ;; Time/Date/Julian Day/Modified Julian Day converters
   date->julian-day
   date->modified-julian-day
   date->time-monotonic
   date->time-tai
   date->time-utc
   julian-day->date
   julian-day->time-monotonic
   julian-day->time-tai
   julian-day->time-utc
   modified-julian-day->date
   modified-julian-day->time-monotonic
   modified-julian-day->time-tai
   modified-julian-day->time-utc
   time-monotonic->date
   time-monotonic->time-tai
   time-monotonic->time-tai!
   time-monotonic->time-utc
   time-monotonic->time-utc!
   time-tai->date
   time-tai->julian-day
   time-tai->modified-julian-day
   time-tai->time-monotonic
   time-tai->time-monotonic!
   time-tai->time-utc
   time-tai->time-utc!
   time-utc->date
   time-utc->julian-day
   time-utc->modified-julian-day
   time-utc->time-monotonic
   time-utc->time-monotonic!
   time-utc->time-tai
   time-utc->time-tai!
   ;; Date to string/string to date converters.
   date->string
   string->date))

(define-structure srfi-19 srfi-19-interface
  (open scheme
	srfi-9 ; DEFINE-RECORD-PROCEDURES
        srfi-23 ; ERROR
        ascii
        receiving
        (modify os-time (prefix os-time:))
        (modify extended-ports
                (rename (make-string-output-port open-output-string)
                        (string-output-port-output get-output-string)
                        (make-string-input-port open-input-string))))
  (files srfi-19))

; SRFI-20 - withdrawn
; SRFI-21 - no implementation given
; SRFI-22 - needs internals hacking

; Error reporting mechanism

(define-structure srfi-23 (export error)
  (open scheme
	(modify exceptions
		(rename (error exceptions:error))))
  (begin
    (define (error message . irritants)
      (apply exceptions:error #f message irritants))))

; Multi-dimensional Array Primitives 

(define-interface srfi-25-interface
  (export array? make-array shape array array-rank
	  array-start array-end array-ref array-set! share-array))

(define-structure srfi-25 srfi-25-interface
  (open scheme
	define-record-types
	(subset exceptions (assertion-violation)))
  (files srfi-25))

; Notation for Specializing Parameters without Currying

(define-interface srfi-26-interface
  (export ((cut cute) :syntax)))

(define-structure srfi-26 srfi-26-interface
  (open scheme)
  (files srfi-26))

; Sources of Random Bits

(define-interface srfi-27-interface
  (export random-integer
          random-real
          default-random-source
          make-random-source
          random-source?
          random-source-state-ref
          random-source-state-set!
          random-source-randomize!
          random-source-pseudo-randomize!
          random-source-make-integers
          random-source-make-reals))

(define-structure srfi-27 srfi-27-interface
  (open
   scheme-level-1
   floatnums
   external-calls load-dynamic-externals
   (subset srfi-9 (define-record-type)) 
   (subset srfi-23 (error)))
  (files srfi-27))

; Basic Format Strings

(define-interface srfi-28-interface
  (export format))

(define-structure srfi-28 srfi-28-interface
  (open scheme
	(subset exceptions (assertion-violation))
	srfi-6				; string ports
	)
  (files srfi-28))

; A special form for recursive evaluation

(define-interface srfi-31-interface
  (export (rec :syntax)))

(define-structure srfi-31 srfi-31-interface
  (open scheme)
  (begin
    ; Taken directly from the SRFI document.
    
    (define-syntax rec
      (syntax-rules ()
	((rec (NAME . VARIABLES) . BODY)
	 (letrec ( (NAME (lambda VARIABLES . BODY)) ) NAME))
	((rec NAME EXPRESSION)
	 (letrec ( (NAME EXPRESSION) ) NAME))))))

; Exception Handling for Programs

(define-interface srfi-34-interface
  (export with-exception-handler
	  raise
	  (guard :syntax)))

(define-structure srfi-34 srfi-34-interface
  (open scheme
	exceptions))

; SRFI 37: args-fold: a program argument processor

(define-interface srfi-37-interface
  (export args-fold
	  option-processor
	  option option-names option-required-arg? option-optional-arg?))

(define-structure srfi-37 srfi-37-interface
  (open scheme
	define-record-types
	srfi-11)
  (files srfi-37))

; SRFI 39: Parameter objects

(define-interface srfi-39-interface
  (export make-parameter
          ((parameterize) :syntax)))

(define-structure srfi-39 srfi-39-interface
  (open scheme
	exceptions
        fluids
        cells)
  (files srfi-39))
  
; SRFI 40: A Library of Streams

(define-interface srfi-40-interface
  (export stream-null (stream-cons :syntax) stream? stream-null? stream-pair?
          stream-car stream-cdr (stream-delay :syntax) stream stream-unfoldn
          stream-map stream-for-each stream-filter))

(define-structure srfi-40 srfi-40-interface
  (open (modify scheme (hide delay force))
        define-record-types
	cells
        (subset srfi-1 (any every))
        srfi-23 ; ERROR
	)
  (files srfi-40))

; SRFI 42: Eager Comprehensions

(define-interface srfi-42-interface
  (export ((do-ec
	    list-ec append-ec
	    string-ec string-append-ec
	    vector-ec vector-of-length-ec
	    sum-ec product-ec
	    min-ec max-ec
	    any?-ec every?-ec
	    first-ec last-ec
	    fold-ec fold3-ec) :syntax)
	  ((:
	    :list :string :vector
	    :integers
	    :range :real-range :char-range
	    :port
	    :dispatched) :syntax)
	  ((:do :let :parallel :while :until) :syntax)
	  :-dispatch-ref :-dispatch-set! make-initial-:-dispatch 
	  (:generator-proc :syntax)))

(define-structure srfi-42 srfi-42-interface
  (open scheme
	srfi-23)
  (files srfi-42))

; SRFI 43: Vector library

(define-interface srfi-43-interface
  (export make-vector vector vector-unfold vector-unfold-right
          vector-copy vector-reverse-copy vector-append vector-concatenate
          vector? vector-empty? vector= vector-ref vector-length
          vector-fold vector-fold-right vector-map vector-map!
          vector-for-each vector-count vector-index vector-skip
          vector-index-right vector-skip-right
          vector-binary-search vector-any vector-every
          vector-set! vector-swap! vector-fill! vector-reverse!
          vector-copy! vector-reverse-copy! vector-reverse!
          vector->list reverse-vector->list list->vector reverse-list->vector))

(define-structure srfi-43 srfi-43-interface
  (open (modify scheme
                (rename (vector-fill! %vector-fill!))
                (rename (vector->list %vector->list))
                (rename (list->vector %list->vector)))
        (modify util (rename (unspecific unspecified-value)))
        (subset srfi-8 (receive))
        (subset exceptions (assertion-violation)))
  (files srfi-43))

; SRFI 45: Primitives for Expressing Iterative Lazy Algorithms

(define-interface srfi-45-interface
  (export (lazy :syntax) force (delay :syntax)))

(define-structure srfi-45 srfi-45-interface
  (open (modify scheme (hide delay force))
	define-record-types)
  (files srfi-45))

; SRFI 60: Integers as Bits

(define-interface srfi-60-interface
  (export logand bitwise-and logior bitwise-ior logxor bitwise-xor
	  lognot bitwise-not bitwise-if bitwise-merge logtest 
	  any-bits-set? logcount bit-count integer-length 
	  log2-binary-factors first-set-bit logbit?  bit-set?  
	  copy-bit bit-field copy-bit-field ash arithmetic-shift 
	  rotate-bit-field reverse-bit-field integer->list 
	  list->integer booleans->integer))

(define-structure srfi-60 srfi-60-interface
  (open scheme bitwise)
  (files srfi-60))

; SRFI 61: A more general cond clause

(define-interface srfi-61-interface
  (export (cond :syntax)))

(define-structure srfi-61 srfi-61-interface
  (open (modify scheme (hide cond)))
  (files srfi-61))

; SRFI 62: S-expression comments

; note this modifies the reader
(define-structure srfi-62 (export)
  (open scheme
	reading)
  (begin
    (define-sharp-macro #\;
      (lambda (char port)
	;; The octothorpe reader leaves the semicolon
	;; in the input stream, so we consume it.
	(read-char port)
	(sub-read-carefully port)
	(sub-read port)))))

; SRFI 63: Homogeneous and Heterogeneous Arrays

(define-interface srfi-63-interface
  (export array? equal? array-rank array-dimensions make-array
          make-shared-array list->array array->list vector->array
          array->vector array-in-bounds? array-ref array-set!
          a:fixz8b a:fixz16b a:fixz32b a:fixz64b
          a:fixn8b a:fixn16b a:fixn32b a:fixn64b          
          a:floc16b a:floc32b a:floc64b a:floc128b
          a:flor16b a:flor32b a:flor64b a:flor128b          
          a:floq32d a:floq64d a:floq128d
          a:bool))

(define-structure srfi-63 srfi-63-interface
  (open (modify scheme-level-2 (hide equal?)) ; redefined
        define-record-types
        srfi-4 srfi-16
        (subset exceptions (assertion-violation)))
  (files srfi-63))

; SRFI 66: Octet Vectors

(define-interface srfi-66-interface
  (export make-u8vector
	  u8vector?
	  list->u8vector u8vector->list
	  u8vector
	  u8vector-length
	  u8vector-ref u8vector-set!
	  u8vector-copy! u8vector-copy
	  u8vector=?
	  u8vector-compare))

(define-structure srfi-66 srfi-66-interface
  (open scheme
	byte-vectors
	(subset primitives (copy-bytes!)))
  (files srfi-66))

; SRFI 67: Compare Procedures

(define-interface srfi-67-interface
  (export boolean-compare
	  char-compare char-compare-ci
	  string-compare string-compare-ci
	  symbol-compare
	  integer-compare rational-compare real-compare complex-compare
	  number-compare
	  vector-compare vector-compare-as-list
	  list-compare list-compare-as-vector
	  pair-compare-car pair-compare-cdr
	  pair-compare
	  default-compare
	  (refine-compare :syntax)
	  (select-compare :syntax)
	  (cond-compare :syntax)
	  (if3 :syntax)
	  ((if=? if<? if>? if<=? if>=? if-not=?) :syntax)
	  =? <? >? <=? >=? not=?
	  </<? </<=? <=/<? <=/<=? >/>? >/>=? >=/>? >=/>=?
	  chain=? chain<? chain>? chain<=? chain>=?
	  pairwise-not=?
	  min-compare max-compare
	  kth-largest
	  compare-by< compare-by> compare-by<= compare-by>= compare-by=/< compare-by=/>
	  debug-compare))

(define-structure srfi-67 srfi-67-interface
  (open scheme
	srfi-16 ; CASE-LAMBDA
	srfi-23 ; ERROR
	srfi-27 ; RANDOM
	)
  (files srfi-67))

; SRFI 71: Extended LET-syntax for multiple values

(define-interface srfi-71-interface
  (export ((let let* letrec) :syntax)
          ((values->list values->vector) :syntax)
          uncons
          uncons-2
          uncons-3
          uncons-4
          uncons-cons
          unlist
          unvector))

(define-structure srfi-71*
  (export ((srfi-let srfi-let* srfi-letrec) :syntax)
          ((values->list values->vector) :syntax)
          uncons
          uncons-2
          uncons-3
          uncons-4
          uncons-cons
          unlist
          unvector)  
  (open (modify scheme
                (rename (let r5rs-let)
                        (let* r5rs-let*)
                        (letrec r5rs-letrec))))
  (files srfi-71))

(define-structure srfi-71 srfi-71-interface
  (open (modify srfi-71*
                (rename (srfi-let let)
                        (srfi-let* let*)
                        (srfi-letrec letrec)))))

; SRFI 74: Octet-addressed binary objects

(define-interface srfi-74-interface
  (export (endianness :syntax)
	  blob? make-blob
	  blob-length
	  blob-u8-ref blob-u8-set!
	  blob-s8-ref blob-s8-set!
	  blob-uint-ref blob-uint-set!
	  blob-sint-ref blob-sint-set!

	  blob-u16-ref blob-s16-ref
	  blob-u16-native-ref blob-s16-native-ref
	  blob-u16-set! blob-s16-set!
	  blob-u16-native-set! blob-s16-native-set!

	  blob-u32-ref blob-s32-ref
	  blob-u32-native-ref blob-s32-native-ref
	  blob-u32-set! blob-s32-set!
	  blob-u32-native-set! blob-s32-native-set!

	  blob-u64-ref blob-s64-ref
	  blob-u64-native-ref blob-s64-native-ref
	  blob-u64-set! blob-s64-set!
	  blob-u64-native-set! blob-s64-native-set!

	  blob=?
	  blob-copy blob-copy!

	  blob->u8-list u8-list->blob
	  blob->uint-list blob->sint-list 
	  uint-list->blob sint-list->blob))

(define-structure srfi-74 srfi-74-interface
  (open scheme
	srfi-23 ; ERROR
	srfi-26 ; CUT
	bitwise
	srfi-66 ; U8VECTOR
	)
  (files srfi-74))

; SRFI 78: Lightweight testing

(define-interface srfi-78-interface
  (export (check :syntax)
          (check-ec :syntax)
          check-report
          check-set-mode!
          check-reset!
          check-passed?))

(define-structure srfi-78 srfi-78-interface
  (open scheme srfi-42
        (subset exceptions (assertion-violation)))
  (files srfi-78))

; SRFI 95: Sorting and Merging

(define-interface srfi-95-interface
  (export sorted? merge merge! sort sort!))

(define-structure srfi-95 srfi-95-interface
  (open (modify scheme (hide equal?)) srfi-63
	(modify sorting (prefix olin:))
	(modify list-merge-sort (prefix olin:))
	(modify vector-merge-sort (prefix olin:)))
  (files srfi-95))