Re: [Haskell-beginners] Beginners Digest, Vol 30, Issue 17

Is there no way to make the class approach (or something like it) work?
That's how I would do it in Java--define the component as an interface as
far as the structure is concerned and then define the component itself to
implement the interface.
*
-- Russ*
On Sun, Dec 12, 2010 at 3:00 AM,
Send Beginners mailing list submissions to beginners@haskell.org
To subscribe or unsubscribe via the World Wide Web, visit http://www.haskell.org/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-request@haskell.org
You can reach the person managing the list at beginners-owner@haskell.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..."
Today's Topics:
1. Re: Linking modules (Brent Yorgey)
----------------------------------------------------------------------
Message: 1 Date: Sat, 11 Dec 2010 15:37:23 -0500 From: Brent Yorgey
Subject: Re: [Haskell-beginners] Linking modules To: beginners@haskell.org Message-ID: <20101211203723.GB9265@seas.upenn.edu> Content-Type: text/plain; charset=iso-8859-1 On Sat, Dec 11, 2010 at 08:56:23PM +0100, Chadda? Fouch? wrote:
On Sat, Dec 11, 2010 at 7:37 PM, Russ Abbott
wrote: 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.
[snip]
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?
GHC allows you to compile mutually recursive modules, see
http://www.haskell.org/ghc/docs/latest/html/users_guide/separate-compilation...
for how to do it.
Yes, this is possible, but it has always seemed sort of fragile and ugly to me. Another suggestion is to put the definitions of the Structure and Component data types into a separate module called Types, and then import Types into both the Structure module (which defines functions over Structures) and the Component module (which defines functions over Components). Then no circularity is needed.
-Brent
------------------------------
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 30, Issue 17 *****************************************

On Sun, Dec 12, 2010 at 03:09:44PM -0800, Russ Abbott wrote:
Is there no way to make the class approach (or something like it) work? That's how I would do it in Java--define the component as an interface as far as the structure is concerned and then define the component itself to implement the interface.
Not really. Although in a sense, my version with a separate Types module feels somehow morally equivalent; the Types module provides the "interface" and then the other modules are defined in terms of that. You could use a type class if you really wanted more of a "behavioral" interface, but you would still have to put the type class in a separate module to avoid circularity. -Brent
* -- Russ*
On Sun, Dec 12, 2010 at 3:00 AM,
wrote: Send Beginners mailing list submissions to beginners@haskell.org
To subscribe or unsubscribe via the World Wide Web, visit http://www.haskell.org/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-request@haskell.org
You can reach the person managing the list at beginners-owner@haskell.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..."
Today's Topics:
1. Re: Linking modules (Brent Yorgey)
----------------------------------------------------------------------
Message: 1 Date: Sat, 11 Dec 2010 15:37:23 -0500 From: Brent Yorgey
Subject: Re: [Haskell-beginners] Linking modules To: beginners@haskell.org Message-ID: <20101211203723.GB9265@seas.upenn.edu> Content-Type: text/plain; charset=iso-8859-1 On Sat, Dec 11, 2010 at 08:56:23PM +0100, Chadda? Fouch? wrote:
On Sat, Dec 11, 2010 at 7:37 PM, Russ Abbott
wrote: 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.
[snip]
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?
GHC allows you to compile mutually recursive modules, see
http://www.haskell.org/ghc/docs/latest/html/users_guide/separate-compilation...
for how to do it.
Yes, this is possible, but it has always seemed sort of fragile and ugly to me. Another suggestion is to put the definitions of the Structure and Component data types into a separate module called Types, and then import Types into both the Structure module (which defines functions over Structures) and the Component module (which defines functions over Components). Then no circularity is needed.
-Brent
------------------------------
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 30, Issue 17 *****************************************
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
participants (2)
-
Brent Yorgey
-
Russ Abbott