Manlio Perillo wrote:
Brandon S. Allbery KF8NH ha scritto:
>
...in theory. In practice GHC needs help with circular imports, and
some cycles might be impossible to resolve.
This is interesting.
Where can I find some examples?
Is this explained in the Real World Haskell book?
I have no idea about RWH, but there are certainly mutual import cycles that
cannot be resolved by using hs-boot files with GHC.
Consider three modules A and B and C, which are A-B-C permutations of
module A(A,AKBC, AKCB)
import B(B,BKAC)
import C(C,CKAB)
data A
AKBC :: Either B C
AKCB :: Either C B
>
> instance Show (A,BKAC,CKAB) where ...
There is no way to break the ?K?? import cycle with just hs-boot files. I had
to solve this by generating "helper" modules.
Call the "data A" the rank-1 declarations. Then the ?K?? are built on rank-1
types such as "B" and "C" and are rank-2 declarations. The rank-1 declarations
can all be put in hs-boot files but the rank-2 declaration import cycle cannot
be broken with the same hs-boot files. Some of these need to be put in separate
modules.
It may be possible to make a useful definition of rank-3 and higher
declarations.
--
Chris
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe