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

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to