I'd agree with Julian Birch, except to say that you shouldn't make a typeclass unless overloading is really needed and you can define laws on the behavior thereof.

A fairly major (IMO) inconvenience with embedding functions in records that have non-function data they operate on is that you won't have a Show instance. Also, you'll be forced to extract the method and then apply it. In doing so, to make things nicer you'll probably pull out an "extract and apply" function. At that point, you're better off lifting the varying implementations into top-level functions and making a wrapper that decides which runs where based on the *data* in the record.

That is, including enough information in the record to decide which function applied.

And this is without having broached whether or not you plan to be able to serialize your data or not.


On Wed, Sep 10, 2014 at 1:30 PM, Julian Birch <julian.birch@gmail.com> wrote:
Bear in mind you can just create functions at the top level that operate on your data structure.  You only need the function to be a member of the record if the function itself changes, which is relatively rare.

Say you need a Foo and a Bar, and they both have labels, implemented in different ways, then you can use a typeclass to achieve your goals.


On Wednesday, September 10, 2014, David McBride <toad3k@gmail.com> wrote:
Is this what you are looking for?

data Foo pl = Foo {
  label :: pl -> String,
  payload :: pl
}

On Wed, Sep 10, 2014 at 2:06 PM, martin <martin.drautzburg@web.de> wrote:
Hello all

if I have a record like

        data Foo pl = Foo {
                    label :: String,
                    payload :: pl
                }

how can I create a similar type where I can populate label so it is not a plain string, but a function which operates on
payload? Something like

        label (Foo pl) = show pl


_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners



--
Sent from an iPhone, please excuse brevity and typos.

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners