I have two modules Structure and Component.  Module Structure defines 
     data Structure = Component ...

Module Component defines
    data Component = ...

I would like Structure to import Component.  But Component includes functions that take a Structure as an argument. So I have (or would like) something like this organization.

Module Structure where
import Component
data Structure = Component ...

Module Component where
data Component = ...

f ::  Structure -> Component ->Structure

The functions in Component are really very Component related and should not be moved to Structure. So how can I set up this circular relationship?


I thought that one approach would be to do something like the following. But when I try I get all fouled up.  Help would be appreciated.

Module Structure where

class Comp 
data Structure = Comp ...

Module Component where
import Structure
data Component = ...

instance Comp Component

If I do this I get a complaint that class Comp needs a type parameter.  If I give it an artificial one, that leads to all sorts of other problems. Is there a better way?

Thanks.

-- Russ