Ah yes, thank you! * Francesco Mazzoli <f...@mazzo.li> [2013-05-08 08:51:12+0100] > At Wed, 8 May 2013 09:46:08 +0300, > Roman Cheplyaka wrote: > > > > I wonder whether it's always possible to break cycles using GHC's > > .hs-boot files. > > > > Consider the following schematic example: > > > > module A where > > > > import B > > > > data A > > > > f :: B -> A > > f = undefined B.g > > > > module B where > > > > import A > > > > data B > > > > g :: A -> B > > g = undefined A.f > > > > A.hs-boot must give a type signature for f, and since the signature > > contains 'B', it must import 'B'. Ditto for B.hs-boot — it must import > > 'A'. > > > > Even if we treat all imports as {-# SOURCE #-}, there is still a cycle > > between the hs-boot files. > > > > So, am I right in understanding that these recursive modules cannot be > > compiled by GHC at all? > > This configuration works for me: > > A.hs: > > module A where > import B > > data A > > f :: B -> A > f = undefined B.g > > A.hs-boot: > > module A where > > import {-# SOURCE #-} B > > data A > > f :: B -> A > > B.hs: > > module B where > import {-# SOURCE #-} A > > data B > > g :: A -> B > g = undefined A.f > > B.hs-boot: > > module B where > data B > > Then I can compile them: > > bitonic@clay /tmp % ghc -c B.hs-boot > bitonic@clay /tmp % ghc -c A.hs-boot > bitonic@clay /tmp % ghc -c B.hs > bitonic@clay /tmp % ghc -c A.hs > > Francesco
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe