Skip to content
Snippets Groups Projects
Commit ec6f40d9 authored by Simon Marlow's avatar Simon Marlow
Browse files

[project @ 1998-02-02 13:31:19 by simonm]

remove old section about module recursion.
parent 70592f1b
No related merge requests found
......@@ -322,51 +322,3 @@ flags in your module, the OPTIONS will get put into the generated .hc
file).
%----------------------------------------------------------------------
<sect2>How to compile mutually recursive modules
<p>
<nidx>module system, recursion</nidx>
Currently, the compiler does not have proper support for dealing with
mutually recursive modules:
<tscreen><verb>
module A where
import B
newtype A = A Int
f :: B -> A
f (B x) = A x
--------
module B where
import A
data B = B !Int
g :: A -> B
g (A x) = B x
</verb></tscreen>
When compiling either module A and B, the compiler will try (in vain)
to look for the interface file of the other. So, to get mutually
recursive modules off the ground, you need to hand write an interface
file for A or B, so as to break the loop. For the example at hand, the
boot interface file for A would like the following:
<tscreen><verb>
_interface_ A 1
_exports_
A A(A) f;
_declarations_
1 newtype A = A PrelBase.Int ;
1 f _:_ B.B -> A.A ;;
</verb></tscreen>
To make sure you get the syntax right, tailoring an existing interface
file is a Good Idea.
<bf>Note:</bf> This is all a temporary solution, a version of the
compiler that handles mutually recursive properly without the manual
construction of interface file, is in the works.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment