Three Recursively defined modules

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Three Recursively defined modules

haskell-2
Hi,

   As "hs-boot" is ghc specific method I am asking on this glasgow-haskell-users
mailing list first.

My hprotoc program converts message definitions into Haskell modules, and
mimicking the expected OOP-like namespaces has been successful so far.

It is possible to define messages and keys that create recursive modules
dependencies, and I have left fixing this to the user.  For the examples I have
run across this has been possible to do manually.

But I can easily write a file which generates three recursively defined modules
with keys that I have not been able to fix with hs-boot files.

I have created toy versions of the 3 modules and their "key"s which contain the
problem.

Can anyone see how to use hs-boot files to compile the three modules below?
Note: The 3 modules ought to be the same aside from cyclic [a,b,c] replacement:

> module A(A(..),akeybc,akeycb) where
>
> import B(B)
> import B(bkeyac)
> import C(C)
> import C(ckeyab)
>
> data A = A { name :: String }
>
> akeybc :: Either B (Maybe C)
> akeybc = Right Nothing
>
> akeycb :: Either C (Maybe B)
> akeycb = Right Nothing
>
> instance Show A where
>   show a = concat [name a,show bkeyac,show ckeyab]


> module B(B(..),bkeyca,bkeyac) where
>
> import A(A)
> import A(akeybc)
> import C(C)
> import C(ckeyba)
>
> data B = B { name :: String }
>
> bkeyca :: Either C (Maybe A)
> bkeyca = Right Nothing
>
> bkeyac :: Either A (Maybe C)
> bkeyac = Right Nothing
>
> instance Show B where
>   show b = concat [name b,show ckeyba,show akeybc]


> module C(C(..),ckeyab,ckeyba) where
>
> import A(A)
> import A(akeycb)
> import B(B)
> import B(bkeyca)
>
> data C = C { name :: String }
>
> ckeyab :: Either A (Maybe B)
> ckeyab = Right Nothing
>
> ckeyba :: Either B (Maybe A)
> ckeyba = Right Nothing
>
> instance Show C where
>   show c = concat [name c,show akeycb,show bkeyca]

It would be disappointing if I had to move the "key"s into separate
modules/namespaces to allow for a solution using hs-boot files.

Thanks,
   Chris
_______________________________________________
Glasgow-haskell-users mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
Reply | Threaded
Open this post in threaded view
|

Re: Three Recursively defined modules

Isaac Dupree
Chris Kuklewicz wrote:
> Can anyone see how to use hs-boot files to compile the three modules below?

I tried. I failed. I don't think it's possible if we
restrict ourselves to adding {-#SOURCE#-} to the .hs files
and adding .hs-boot files.  In any case it's not possible in
all cases.  Which annoys me.

> It would be disappointing if I had to move the "key"s into separate modules/namespaces to allow for a solution using hs-boot files.

I would suggest that this is actually not bad at all (more
modules, more hs-boot files, what's the difference?).
Except I realized, then you have orphan Show instances.
What a nuisance.

-Isaac
_______________________________________________
Glasgow-haskell-users mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users