doc-src/Codegen/Thy/document/Introduction.tex
changeset 39683 f75a01ee6c41
parent 39664 0afaf89ab591
child 39745 3aa2bc9c5478
equal deleted inserted replaced
39682:066e2d4d0de8 39683:f75a01ee6c41
   131 \begin{isamarkuptext}%
   131 \begin{isamarkuptext}%
   132 \noindent resulting in the following code:%
   132 \noindent resulting in the following code:%
   133 \end{isamarkuptext}%
   133 \end{isamarkuptext}%
   134 \isamarkuptrue%
   134 \isamarkuptrue%
   135 %
   135 %
   136 \isadelimquote
   136 \isadelimtypewriter
   137 %
   137 %
   138 \endisadelimquote
   138 \endisadelimtypewriter
   139 %
   139 %
   140 \isatagquote
   140 \isatagtypewriter
   141 %
   141 %
   142 \begin{isamarkuptext}%
   142 \begin{isamarkuptext}%
   143 \begin{typewriter}
   143 structure\ Example\ {\isacharcolon}\ sig\isanewline
   144     structure\ Example\ {\isacharcolon}\ sig\isanewline
       
   145 \ \ val\ id\ {\isacharcolon}\ {\isacharprime}a\ {\isacharminus}{\isachargreater}\ {\isacharprime}a\isanewline
   144 \ \ val\ id\ {\isacharcolon}\ {\isacharprime}a\ {\isacharminus}{\isachargreater}\ {\isacharprime}a\isanewline
   146 \ \ val\ fold\ {\isacharcolon}\ {\isacharparenleft}{\isacharprime}a\ {\isacharminus}{\isachargreater}\ {\isacharprime}b\ {\isacharminus}{\isachargreater}\ {\isacharprime}b{\isacharparenright}\ {\isacharminus}{\isachargreater}\ {\isacharprime}a\ list\ {\isacharminus}{\isachargreater}\ {\isacharprime}b\ {\isacharminus}{\isachargreater}\ {\isacharprime}b\isanewline
   145 \ \ val\ fold\ {\isacharcolon}\ {\isacharparenleft}{\isacharprime}a\ {\isacharminus}{\isachargreater}\ {\isacharprime}b\ {\isacharminus}{\isachargreater}\ {\isacharprime}b{\isacharparenright}\ {\isacharminus}{\isachargreater}\ {\isacharprime}a\ list\ {\isacharminus}{\isachargreater}\ {\isacharprime}b\ {\isacharminus}{\isachargreater}\ {\isacharprime}b\isanewline
   147 \ \ val\ rev\ {\isacharcolon}\ {\isacharprime}a\ list\ {\isacharminus}{\isachargreater}\ {\isacharprime}a\ list\isanewline
   146 \ \ val\ rev\ {\isacharcolon}\ {\isacharprime}a\ list\ {\isacharminus}{\isachargreater}\ {\isacharprime}a\ list\isanewline
   148 \ \ datatype\ {\isacharprime}a\ queue\ {\isacharequal}\ AQueue\ of\ {\isacharprime}a\ list\ {\isacharasterisk}\ {\isacharprime}a\ list\isanewline
   147 \ \ datatype\ {\isacharprime}a\ queue\ {\isacharequal}\ AQueue\ of\ {\isacharprime}a\ list\ {\isacharasterisk}\ {\isacharprime}a\ list\isanewline
   149 \ \ val\ empty\ {\isacharcolon}\ {\isacharprime}a\ queue\isanewline
   148 \ \ val\ empty\ {\isacharcolon}\ {\isacharprime}a\ queue\isanewline
   171 \ \ \ \ \ \ {\isacharparenleft}SOME\ y{\isacharcomma}\ AQueue\ {\isacharparenleft}{\isacharbrackleft}{\isacharbrackright}{\isacharcomma}\ ys{\isacharparenright}{\isacharparenright}\isanewline
   170 \ \ \ \ \ \ {\isacharparenleft}SOME\ y{\isacharcomma}\ AQueue\ {\isacharparenleft}{\isacharbrackleft}{\isacharbrackright}{\isacharcomma}\ ys{\isacharparenright}{\isacharparenright}\isanewline
   172 \ \ \ \ end{\isacharsemicolon}\isanewline
   171 \ \ \ \ end{\isacharsemicolon}\isanewline
   173 \isanewline
   172 \isanewline
   174 fun\ enqueue\ x\ {\isacharparenleft}AQueue\ {\isacharparenleft}xs{\isacharcomma}\ ys{\isacharparenright}{\isacharparenright}\ {\isacharequal}\ AQueue\ {\isacharparenleft}x\ {\isacharcolon}{\isacharcolon}\ xs{\isacharcomma}\ ys{\isacharparenright}{\isacharsemicolon}\isanewline
   173 fun\ enqueue\ x\ {\isacharparenleft}AQueue\ {\isacharparenleft}xs{\isacharcomma}\ ys{\isacharparenright}{\isacharparenright}\ {\isacharequal}\ AQueue\ {\isacharparenleft}x\ {\isacharcolon}{\isacharcolon}\ xs{\isacharcomma}\ ys{\isacharparenright}{\isacharsemicolon}\isanewline
   175 \isanewline
   174 \isanewline
   176 end{\isacharsemicolon}\ {\isacharparenleft}{\isacharasterisk}struct\ Example{\isacharasterisk}{\isacharparenright}\isanewline
   175 end{\isacharsemicolon}\ {\isacharparenleft}{\isacharasterisk}struct\ Example{\isacharasterisk}{\isacharparenright}\isanewline%
   177 
   176 \end{isamarkuptext}%
   178   \end{typewriter}%
   177 \isamarkuptrue%
   179 \end{isamarkuptext}%
   178 %
   180 \isamarkuptrue%
   179 \endisatagtypewriter
   181 %
   180 {\isafoldtypewriter}%
   182 \endisatagquote
   181 %
   183 {\isafoldquote}%
   182 \isadelimtypewriter
   184 %
   183 %
   185 \isadelimquote
   184 \endisadelimtypewriter
   186 %
       
   187 \endisadelimquote
       
   188 %
   185 %
   189 \begin{isamarkuptext}%
   186 \begin{isamarkuptext}%
   190 \noindent The \indexdef{}{command}{export\_code}\hypertarget{command.export-code}{\hyperlink{command.export-code}{\mbox{\isa{\isacommand{export{\isacharunderscore}code}}}}} command takes a
   187 \noindent The \indexdef{}{command}{export\_code}\hypertarget{command.export-code}{\hyperlink{command.export-code}{\mbox{\isa{\isacommand{export{\isacharunderscore}code}}}}} command takes a
   191   space-separated list of constants for which code shall be generated;
   188   space-separated list of constants for which code shall be generated;
   192   anything else needed for those is added implicitly.  Then follows a
   189   anything else needed for those is added implicitly.  Then follows a
   217 \begin{isamarkuptext}%
   214 \begin{isamarkuptext}%
   218 \noindent This is the corresponding code:%
   215 \noindent This is the corresponding code:%
   219 \end{isamarkuptext}%
   216 \end{isamarkuptext}%
   220 \isamarkuptrue%
   217 \isamarkuptrue%
   221 %
   218 %
   222 \isadelimquote
   219 \isadelimtypewriter
   223 %
   220 %
   224 \endisadelimquote
   221 \endisadelimtypewriter
   225 %
   222 %
   226 \isatagquote
   223 \isatagtypewriter
   227 %
   224 %
   228 \begin{isamarkuptext}%
   225 \begin{isamarkuptext}%
   229 \begin{typewriter}
   226 module\ Example\ where\ {\isacharbraceleft}\isanewline
   230     module\ Example\ where\ {\isacharbraceleft}\isanewline
       
   231 \isanewline
   227 \isanewline
   232 data\ Queue\ a\ {\isacharequal}\ AQueue\ {\isacharbrackleft}a{\isacharbrackright}\ {\isacharbrackleft}a{\isacharbrackright}{\isacharsemicolon}\isanewline
   228 data\ Queue\ a\ {\isacharequal}\ AQueue\ {\isacharbrackleft}a{\isacharbrackright}\ {\isacharbrackleft}a{\isacharbrackright}{\isacharsemicolon}\isanewline
   233 \isanewline
   229 \isanewline
   234 empty\ {\isacharcolon}{\isacharcolon}\ forall\ a{\isachardot}\ Queue\ a{\isacharsemicolon}\isanewline
   230 empty\ {\isacharcolon}{\isacharcolon}\ forall\ a{\isachardot}\ Queue\ a{\isacharsemicolon}\isanewline
   235 empty\ {\isacharequal}\ AQueue\ {\isacharbrackleft}{\isacharbrackright}\ {\isacharbrackleft}{\isacharbrackright}{\isacharsemicolon}\isanewline
   231 empty\ {\isacharequal}\ AQueue\ {\isacharbrackleft}{\isacharbrackright}\ {\isacharbrackleft}{\isacharbrackright}{\isacharsemicolon}\isanewline
   243 \ \ {\isacharbraceright}\ in\ {\isacharparenleft}Just\ y{\isacharcomma}\ AQueue\ {\isacharbrackleft}{\isacharbrackright}\ ys{\isacharparenright}{\isacharsemicolon}\isanewline
   239 \ \ {\isacharbraceright}\ in\ {\isacharparenleft}Just\ y{\isacharcomma}\ AQueue\ {\isacharbrackleft}{\isacharbrackright}\ ys{\isacharparenright}{\isacharsemicolon}\isanewline
   244 \isanewline
   240 \isanewline
   245 enqueue\ {\isacharcolon}{\isacharcolon}\ forall\ a{\isachardot}\ a\ {\isacharminus}{\isachargreater}\ Queue\ a\ {\isacharminus}{\isachargreater}\ Queue\ a{\isacharsemicolon}\isanewline
   241 enqueue\ {\isacharcolon}{\isacharcolon}\ forall\ a{\isachardot}\ a\ {\isacharminus}{\isachargreater}\ Queue\ a\ {\isacharminus}{\isachargreater}\ Queue\ a{\isacharsemicolon}\isanewline
   246 enqueue\ x\ {\isacharparenleft}AQueue\ xs\ ys{\isacharparenright}\ {\isacharequal}\ AQueue\ {\isacharparenleft}x\ {\isacharcolon}\ xs{\isacharparenright}\ ys{\isacharsemicolon}\isanewline
   242 enqueue\ x\ {\isacharparenleft}AQueue\ xs\ ys{\isacharparenright}\ {\isacharequal}\ AQueue\ {\isacharparenleft}x\ {\isacharcolon}\ xs{\isacharparenright}\ ys{\isacharsemicolon}\isanewline
   247 \isanewline
   243 \isanewline
   248 {\isacharbraceright}\isanewline
   244 {\isacharbraceright}\isanewline%
   249 
   245 \end{isamarkuptext}%
   250   \end{typewriter}%
   246 \isamarkuptrue%
   251 \end{isamarkuptext}%
   247 %
   252 \isamarkuptrue%
   248 \endisatagtypewriter
   253 %
   249 {\isafoldtypewriter}%
   254 \endisatagquote
   250 %
   255 {\isafoldquote}%
   251 \isadelimtypewriter
   256 %
   252 %
   257 \isadelimquote
   253 \endisadelimtypewriter
   258 %
       
   259 \endisadelimquote
       
   260 %
   254 %
   261 \begin{isamarkuptext}%
   255 \begin{isamarkuptext}%
   262 \noindent For more details about \hyperlink{command.export-code}{\mbox{\isa{\isacommand{export{\isacharunderscore}code}}}} see
   256 \noindent For more details about \hyperlink{command.export-code}{\mbox{\isa{\isacommand{export{\isacharunderscore}code}}}} see
   263   \secref{sec:further}.%
   257   \secref{sec:further}.%
   264 \end{isamarkuptext}%
   258 \end{isamarkuptext}%
   386 \noindent The corresponding code in Haskell uses that language's
   380 \noindent The corresponding code in Haskell uses that language's
   387   native classes:%
   381   native classes:%
   388 \end{isamarkuptext}%
   382 \end{isamarkuptext}%
   389 \isamarkuptrue%
   383 \isamarkuptrue%
   390 %
   384 %
   391 \isadelimquote
   385 \isadelimtypewriter
   392 %
   386 %
   393 \endisadelimquote
   387 \endisadelimtypewriter
   394 %
   388 %
   395 \isatagquote
   389 \isatagtypewriter
   396 %
   390 %
   397 \begin{isamarkuptext}%
   391 \begin{isamarkuptext}%
   398 \begin{typewriter}
   392 module\ Example\ where\ {\isacharbraceleft}\isanewline
   399     module\ Example\ where\ {\isacharbraceleft}\isanewline
       
   400 \isanewline
   393 \isanewline
   401 data\ Nat\ {\isacharequal}\ Zero{\isacharunderscore}nat\ {\isacharbar}\ Suc\ Nat{\isacharsemicolon}\isanewline
   394 data\ Nat\ {\isacharequal}\ Zero{\isacharunderscore}nat\ {\isacharbar}\ Suc\ Nat{\isacharsemicolon}\isanewline
   402 \isanewline
   395 \isanewline
   403 plus{\isacharunderscore}nat\ {\isacharcolon}{\isacharcolon}\ Nat\ {\isacharminus}{\isachargreater}\ Nat\ {\isacharminus}{\isachargreater}\ Nat{\isacharsemicolon}\isanewline
   396 plus{\isacharunderscore}nat\ {\isacharcolon}{\isacharcolon}\ Nat\ {\isacharminus}{\isachargreater}\ Nat\ {\isacharminus}{\isachargreater}\ Nat{\isacharsemicolon}\isanewline
   404 plus{\isacharunderscore}nat\ {\isacharparenleft}Suc\ m{\isacharparenright}\ n\ {\isacharequal}\ plus{\isacharunderscore}nat\ m\ {\isacharparenleft}Suc\ n{\isacharparenright}{\isacharsemicolon}\isanewline
   397 plus{\isacharunderscore}nat\ {\isacharparenleft}Suc\ m{\isacharparenright}\ n\ {\isacharequal}\ plus{\isacharunderscore}nat\ m\ {\isacharparenleft}Suc\ n{\isacharparenright}{\isacharsemicolon}\isanewline
   432 {\isacharbraceright}{\isacharsemicolon}\isanewline
   425 {\isacharbraceright}{\isacharsemicolon}\isanewline
   433 \isanewline
   426 \isanewline
   434 bexp\ {\isacharcolon}{\isacharcolon}\ Nat\ {\isacharminus}{\isachargreater}\ Nat{\isacharsemicolon}\isanewline
   427 bexp\ {\isacharcolon}{\isacharcolon}\ Nat\ {\isacharminus}{\isachargreater}\ Nat{\isacharsemicolon}\isanewline
   435 bexp\ n\ {\isacharequal}\ pow\ n\ {\isacharparenleft}Suc\ {\isacharparenleft}Suc\ Zero{\isacharunderscore}nat{\isacharparenright}{\isacharparenright}{\isacharsemicolon}\isanewline
   428 bexp\ n\ {\isacharequal}\ pow\ n\ {\isacharparenleft}Suc\ {\isacharparenleft}Suc\ Zero{\isacharunderscore}nat{\isacharparenright}{\isacharparenright}{\isacharsemicolon}\isanewline
   436 \isanewline
   429 \isanewline
   437 {\isacharbraceright}\isanewline
   430 {\isacharbraceright}\isanewline%
   438 
   431 \end{isamarkuptext}%
   439   \end{typewriter}%
   432 \isamarkuptrue%
   440 \end{isamarkuptext}%
   433 %
   441 \isamarkuptrue%
   434 \endisatagtypewriter
   442 %
   435 {\isafoldtypewriter}%
   443 \endisatagquote
   436 %
   444 {\isafoldquote}%
   437 \isadelimtypewriter
   445 %
   438 %
   446 \isadelimquote
   439 \endisadelimtypewriter
   447 %
       
   448 \endisadelimquote
       
   449 %
   440 %
   450 \begin{isamarkuptext}%
   441 \begin{isamarkuptext}%
   451 \noindent This is a convenient place to show how explicit dictionary
   442 \noindent This is a convenient place to show how explicit dictionary
   452   construction manifests in generated code -- the same example in
   443   construction manifests in generated code -- the same example in
   453   \isa{SML}:%
   444   \isa{SML}:%
   454 \end{isamarkuptext}%
   445 \end{isamarkuptext}%
   455 \isamarkuptrue%
   446 \isamarkuptrue%
   456 %
   447 %
   457 \isadelimquote
   448 \isadelimtypewriter
   458 %
   449 %
   459 \endisadelimquote
   450 \endisadelimtypewriter
   460 %
   451 %
   461 \isatagquote
   452 \isatagtypewriter
   462 %
   453 %
   463 \begin{isamarkuptext}%
   454 \begin{isamarkuptext}%
   464 \begin{typewriter}
   455 structure\ Example\ {\isacharcolon}\ sig\isanewline
   465     structure\ Example\ {\isacharcolon}\ sig\isanewline
       
   466 \ \ datatype\ nat\ {\isacharequal}\ Zero{\isacharunderscore}nat\ {\isacharbar}\ Suc\ of\ nat\isanewline
   456 \ \ datatype\ nat\ {\isacharequal}\ Zero{\isacharunderscore}nat\ {\isacharbar}\ Suc\ of\ nat\isanewline
   467 \ \ val\ plus{\isacharunderscore}nat\ {\isacharcolon}\ nat\ {\isacharminus}{\isachargreater}\ nat\ {\isacharminus}{\isachargreater}\ nat\isanewline
   457 \ \ val\ plus{\isacharunderscore}nat\ {\isacharcolon}\ nat\ {\isacharminus}{\isachargreater}\ nat\ {\isacharminus}{\isachargreater}\ nat\isanewline
   468 \ \ type\ {\isacharprime}a\ semigroup\isanewline
   458 \ \ type\ {\isacharprime}a\ semigroup\isanewline
   469 \ \ val\ mult\ {\isacharcolon}\ {\isacharprime}a\ semigroup\ {\isacharminus}{\isachargreater}\ {\isacharprime}a\ {\isacharminus}{\isachargreater}\ {\isacharprime}a\ {\isacharminus}{\isachargreater}\ {\isacharprime}a\isanewline
   459 \ \ val\ mult\ {\isacharcolon}\ {\isacharprime}a\ semigroup\ {\isacharminus}{\isachargreater}\ {\isacharprime}a\ {\isacharminus}{\isachargreater}\ {\isacharprime}a\ {\isacharminus}{\isachargreater}\ {\isacharprime}a\isanewline
   470 \ \ type\ {\isacharprime}a\ monoid\isanewline
   460 \ \ type\ {\isacharprime}a\ monoid\isanewline
   503 val\ monoid{\isacharunderscore}nat\ {\isacharequal}\ {\isacharbraceleft}semigroup{\isacharunderscore}monoid\ {\isacharequal}\ semigroup{\isacharunderscore}nat{\isacharcomma}\ neutral\ {\isacharequal}\ neutral{\isacharunderscore}nat{\isacharbraceright}\isanewline
   493 val\ monoid{\isacharunderscore}nat\ {\isacharequal}\ {\isacharbraceleft}semigroup{\isacharunderscore}monoid\ {\isacharequal}\ semigroup{\isacharunderscore}nat{\isacharcomma}\ neutral\ {\isacharequal}\ neutral{\isacharunderscore}nat{\isacharbraceright}\isanewline
   504 \ \ {\isacharcolon}\ nat\ monoid{\isacharsemicolon}\isanewline
   494 \ \ {\isacharcolon}\ nat\ monoid{\isacharsemicolon}\isanewline
   505 \isanewline
   495 \isanewline
   506 fun\ bexp\ n\ {\isacharequal}\ pow\ monoid{\isacharunderscore}nat\ n\ {\isacharparenleft}Suc\ {\isacharparenleft}Suc\ Zero{\isacharunderscore}nat{\isacharparenright}{\isacharparenright}{\isacharsemicolon}\isanewline
   496 fun\ bexp\ n\ {\isacharequal}\ pow\ monoid{\isacharunderscore}nat\ n\ {\isacharparenleft}Suc\ {\isacharparenleft}Suc\ Zero{\isacharunderscore}nat{\isacharparenright}{\isacharparenright}{\isacharsemicolon}\isanewline
   507 \isanewline
   497 \isanewline
   508 end{\isacharsemicolon}\ {\isacharparenleft}{\isacharasterisk}struct\ Example{\isacharasterisk}{\isacharparenright}\isanewline
   498 end{\isacharsemicolon}\ {\isacharparenleft}{\isacharasterisk}struct\ Example{\isacharasterisk}{\isacharparenright}\isanewline%
   509 
   499 \end{isamarkuptext}%
   510   \end{typewriter}%
   500 \isamarkuptrue%
   511 \end{isamarkuptext}%
   501 %
   512 \isamarkuptrue%
   502 \endisatagtypewriter
   513 %
   503 {\isafoldtypewriter}%
   514 \endisatagquote
   504 %
   515 {\isafoldquote}%
   505 \isadelimtypewriter
   516 %
   506 %
   517 \isadelimquote
   507 \endisadelimtypewriter
   518 %
       
   519 \endisadelimquote
       
   520 %
   508 %
   521 \begin{isamarkuptext}%
   509 \begin{isamarkuptext}%
   522 \noindent Note the parameters with trailing underscore (\verb|A_|), which are the dictionary parameters.%
   510 \noindent Note the parameters with trailing underscore (\verb|A_|), which are the dictionary parameters.%
   523 \end{isamarkuptext}%
   511 \end{isamarkuptext}%
   524 \isamarkuptrue%
   512 \isamarkuptrue%