Phlex wrote:


Christopher Lane Hinson wrote:

Where "InsidenessMap a b c" represents a relationship where b's are inside a's, and b's have a state of c. Then, you need to declare a separate InsidenessMap for each possible relationship, but this ensures that you'll never put a galaxy inside a solar system. Or you can make 'a' be a reference to any type of object; there are options.


Ketil Malde wrote:
Identity can be emulated by relatively straightforward means: store all
planets in a Map indexed by something that is useful as an identifier
(i.e. stays constant and is unique), and have a Galaxy keep a list of
identifiers.

So basically you guys are saying I should rethink the data structure into a relational model instead of sticking to the OO model... I think i could do this pretty easily. a table would be a map of id to instance ...then another map for foreign keys, or maybe just as a member of each data

Is the relational model a better fit than the object model for functional programming ?

Of course it depends on what you are doing, but I actually have never needed to encode a relational model like this, even when I have deeply nested structures.

I find that my usual solution involves doing my transformations on the data structure "all at once". By that I mean that instead of performing a number of steps from the root of the data structure, I do all the operations in one pass.

To keep the algorithms decoupled I usually end up passing the operations to perform as an argument. Higher-order functions are your friend.

Because Haskell is lazy I don't really worry about doing "too much" and if I really need it, I can use the result as part of the transformation (its like recursion, but with values). Between laziness and HOF I rarely need any kind of state.

Its not directly related to your question, but I found the iterative root-finding and differentiation examples in "Why Functional Programming Matters" [1] to be eye-opening about the "functional way" because they are algorithms that are almost always described as stateful computations, but are shown to be very elegant in a pure functional implementation.

[1] http://www.math.chalmers.se/~rjmh/Papers/whyfp.html

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

Reply via email to