[Haskell-cafe] circular imports
Henning Thielemann
lemming at henning-thielemann.de
Mon Sep 6 13:40:04 EDT 2010
On Mon, 6 Sep 2010, Evan Laforge wrote:
> I have a few techniques to get out:
>
> - Replace Things with ThingIds which have no big dependencies, and can
> then be looked up in a Map later. This replaces direct access with
> lookup and thows some extra Maybes in there, which is not very nice.
>
> - Cleverly use type variables to try to factor out the problematic
> type. Then I can stitch the data structure back together at a higher
> level with a type alias. This is sort of complicated and awkward.
That's what I typically make. It was only once, where I could not easily
decide which datatype to make the parameter of the other one.
> - Move the declarations that must be moved to the low level module,
> re-export them from the module that defines their (smart)
> constructors, and pretend like they belong to that module. This works
> well when it can work, but makes the code awkward to navigate and
> doesn't let you hide their implementation unless you give up and move
> the rest of the code in as well.
I often need Private modules anyway for package-wide definitions. Then I
define the type in the Private module and export it only from the
corresponding public module. Unfortunately, Haddock does not play nicely
with it. I would like to tell Haddock to treat the public module as the
one that defines the type.
> Is this a problem others have noticed? Any other ideas or solutions?
Unfortunately no more ideas, but you may add more thoughts to
http://haskell.org/haskellwiki/Mutually_recursive_modules#Resolve_mutual_recursion
More information about the Haskell-Cafe
mailing list