summaryrefslogtreecommitdiff
path: root/examples/modules/main
blob: 603ea10f15a8a58789cd38e1d3c6444150839c65 (plain)
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
#! /usr/local/bin/guile -s
!#
;;; examples/modules/main -- Module system demo.

;;; Commentary:

;;; The main demo program for the modules subdirectory.
;;;
;;; This program shows how all the new fancy module import features
;;; are to be used.

;;; Author: Martin Grabmueller
;;; Date: 2001-05-29

;;; Code:

(define-module (main)
  ;; The module 0 is imported completely.
  ;;
  :use-module (module-0)

  ;; Module 1 is imported completely, too, but the procedure names are
  ;; prefixed with the module name.
  ;;
  :use-module ((module-1) :rename (symbol-prefix-proc 'module-1:))

  ;; From module 2, only the procedure `braz' is imported, so that the
  ;; procedures `foo' and `bar' also exported by that module don't
  ;; clash with the definitions of module 0.
  ;;
  :use-module ((module-2) :select (braz))
  
  ;; Import the bindings from module 2 again, now renaming them by
  ;; explicitly mentioning the original and new names.
  ;;
  :use-module ((module-2) :select ((braz . m-2:braz) (foo . m-2:foo))))

;;
;; Now call the various imported procedures.
;;

(foo)
(bar)
(module-1:foo)
(module-1:bar)
(braz)
(m-2:braz)
(m-2:foo)

;; Local variables:
;; mode: scheme
;; End: