Re: Réf. : [Haskell-cafe] Re: circular imports

Claus Reinke claus.reinke at talk21.com
Tue Sep 7 13:05:35 EDT 2010


> That sort of code (stripped out):
> 
> In Game.hs:
> 
> data Game = Game { ...
>                   activeRules :: [Rule]}
> 
> applyTo :: Rule -> Game -> Game
> applyTo r gs = ...

Often, it helps to parameterize the types/functions (instead
of using recursive  modules to hardcode the parameters).

Would something like this work for your case (taking the
Game module out of the loop)?

data Game rule = Game { ...
                  activeRules :: [rule]}

applyTo :: rule -> Game rule -> Game rule
applyTo r gs = ...

> In Rule.hs:
>.. 
> isRuleLegal :: Rule -> NamedRule -> Game Rule -> Bool
> isRuleLegal = ...
> 
> In Obs.hs:
> 
> evalObs :: Obs -> NamedRule -> Game Rule -> EvalObsType
> evalObs = ...

For the record, I'd like to have recursive modules without
having to go outside the language (some standardized
notion of Haskell module interfaces would be nicer than
implementation-specific boot files). 

But I'd like to have parameterized modules even more,
as that would allow me to avoid many use cases of
recursive modules (again, that would seem to require
module interfaces).

Claus
 


More information about the Haskell-Cafe mailing list