\chapter{Beispiel zum Rautenimport}
\label{cha_rautenimport}

Die folgenden Seiten geben das in Abschnitt \ref{subsec_rautenimport}
eingef"uhrte Beispiel zur Thematik des Rautenimports in voller L"ange
wieder.  Dabei wird angenommen, da"s bestimmte f"ur dieses Beispiel
nicht relevante Bezeichner, wie z.B.\ \textit{list}, \textit{iter}
usw.\ sich bereits in der Umgebung befinden, gegen die diese
Ausdr"ucke "ubersetzt werden.

Das in Abschnitt \ref{subsec_rautenimport} verwendete Modul
\textit{fastStack} ist hier nicht explizit aufgef"uhrt, da es sich
nicht wesentlich von \textit{stack} unterscheidet und an dieser Stelle
der Schwerpunkt auf der Verwendung der Sichtbarkeitsoperationen liegen
soll.  Das Modul \textit{stack} sowie die Schnittstelle \textit{Stack}
wird in Abbildung \ref{abb_stackLINK} auf Seite
\pageref{abb_stackLINK} bzw.\ Abbildung \ref{abb_Stack} auf Seite
\pageref{abb_Stack} aufgef"uhrt.

\section{Schnittstelle \textit{Kreditor}}
\begin{alltt}
\textbf{Let} Kreditor = \textbf{Scope} \textbf{with} StdType StdIde Stack \textbf{do}
\textbf{Oper}(\textbf{Let} StdType = StdType()  stdType :StdType
     \textbf{Let} StdIde = StdIde(:StdType) stdIde :StdIde
     \textbf{Let} Stack = Stack(:StdType :StdIde stdIde)  stack :Stack)
  \textbf{Scope} \textbf{with} stack stdIde \textbf{do}
    \textbf{Tuple}
      get():stack.T(:stdIde.Int)
    \textbf{end}
  \textbf{end}
\textbf{end}
\end{alltt}

\section{Modul \textit{kreditor}}
\begin{alltt}
\textbf{let} kreditorLINK =
\textbf{scope with} Stack StdType Kreditor \textbf{do}
  \textbf{fun}(\textbf{Let} StdType = StdType()  stdType :StdType  
      \textbf{Let} StdIde = StdIde(:StdType) stdIde :StdIde
      \textbf{Let} Stack = Stack(:StdType :StdIde stdIde)  stack :Stack
      \textbf{Let} Kreditor = Kreditor(:StdType  stdType
                              :StdIde stdIde
                              :Stack  stack)) :Kreditor
  \textbf{scope with} stack stdType Kreditor \textbf{do}
    \textbf{let} get() :stack.T(:stdType.Int) =
      \ldots
    \textbf{let} result :Kreditor = 
    \textbf{tuple}
      \textbf{let} get = get
    \textbf{end}
    result
  \textbf{end}
\textbf{end}
\end{alltt}

\section{Schnittstelle \textit{Debitor}}
\begin{alltt}
\textbf{Let} Debitor = \textbf{Scope with} StdType StdIde Stack \textbf{do}
\textbf{Oper}(\textbf{Let} StdType = StdType()  stdType :StdType
     \textbf{Let} StdIde = StdIde(:StdType) stdIde :StdIde
     \textbf{Let} Stack = Stack(:StdType :StdIde stdIde)  stack :Stack)
  \textbf{Scope with} stack stdIde \textbf{do}
    \textbf{Tuple}
      put(a :stack.T(:stdIde.Int)) :stdIde.Bool
    \textbf{end}
  \textbf{end}
\textbf{end}
\end{alltt}

\section{Modul \textit{debitor}}
\begin{alltt}
\textbf{let} debitorLINK =
\textbf{scope with} Stack StdType Debitor \textbf{do}
  \textbf{fun}(\textbf{Let} StdType = StdType stdType :StdType  
      \textbf{Let} StdIde = StdIde(:StdType) stdIde :StdIde
      \textbf{Let} Stack = Stack(:StdType :StdIde stdIde)  stack :Stack
      \textbf{Let} Debitor = Debitor(:StdType stdType 
                            :StdIde stdIde
                            :Stack stack)) :Debitor
  \textbf{scope with} stdType stack Debitor \textbf{do}
    \textbf{let} put(a :stack.T(:stdType.Int)) :stdType.Bool =
      \ldots
    \textbf{let} result :Debitor = 
    \textbf{tuple}
      \textbf{let} put = put
    \textbf{end}
    result
  \textbf{end}
\textbf{end}
\end{alltt}

\section{Schnittstelle \textit{Mandant}}
\begin{alltt}
\textbf{Let} Mandant = \textbf{Scope with} StdType Stack Debitor Kreditor \textbf{do}
\textbf{Oper}(\textbf{Let} StdType = StdType()  stdType :StdType
     \textbf{Let} StdIde = StdIde(:StdType) stdIde :StdIde
     \textbf{Let} Stack = Stack(:StdType :StdIde stdIde)  stack :Stack
     \textbf{Let} Debitor = Debitor(:StdType stdType 
                           :StdIde stdIde
                           :Stack stack)  debitor :Debitor
     \textbf{Let} Kreditor = Kreditor(:StdType stdType 
                             :StdIde stdIde
                             :Stack stack)  kreditor :Kreditor)
  \textbf{Scope with} stdIde \textbf{do}
    \textbf{Tuple}
      f() :stdIde.Bool
    \textbf{end}
  \textbf{end}
\textbf{end}
\end{alltt}

\section{Modul \textit{mandant}}
\begin{alltt}
\textbf{let} mandantLINK =
\textbf{scope} \textbf{with} Stack StdType Debitor Kreditor Mandant \textbf{do}
  \textbf{fun}(\textbf{Let} StdType = StdType  stdType :StdType  
      \textbf{Let} StdIde = StdIde(:StdType)
      \textbf{Let} Stack = Stack(:StdType :StdIde stdIde)  stack :Stack
      \textbf{Let} Debitor = Debitor(:StdType stdType 
                          :StdIde stdIde
                          :Stack stack)  debitor:Debitor
      \textbf{Let} Kreditor = Kreditor(:StdType stdType 
                            :StdIde stdIde
                            :Stack stack)  kreditor :Kreditor
      \textbf{Let} Mandant = Mandant(:StdType stdType 
                            :StdIde stdIde
                            :Stack stack 
                            :Debitor debitor
                            :Kreditor kreditor)) :Mandant
  \textbf{scope with} stdIde debitor kreditor Mandant \textbf{do}
    \textbf{let} f() :stdIde.Bool =
      debitor.put(kreditor.get())
    \textbf{let} result :Mandant = 
    \textbf{tuple}
      \textbf{let} f = f
    \textbf{end}
    result
  \textbf{end}
\textbf{end}
\end{alltt}





