why does defrecord and deftype exist? shouldn't deftype be sufficient?
Why is defrecord encouraged over deftype, with defype reserved for low
level bits?

it is because records can act like a generic map, which means data is
not hidden inside the type, which makes types created with defrecord
much more useful. How much more useful then is an ordinary map(Where
you can actually remove all the keys)?

I was the first person to introduce protocols and records into our
code base work, and I have colleagues who are even more ragingly
anti-protocols/types. Which I think is a little crazy, they are useful
and service a purpose. But even I am outraged by how quickly
multimethods (things of beauty, joy, and power) were abandoned by the
community once a shiny new toy (types/protocols) was available that if
you squinted at looked sort of like the object stuff.

On Sun, May 20, 2012 at 2:26 PM, Kevin Downey <redc...@gmail.com> wrote:
> On Sun, May 20, 2012 at 2:23 PM, Warren Lynn <wrn.l...@gmail.com> wrote:
>> Well, I don't want to be a beginner for too long, :-)
>
> then "As a Clojure programmer you should only need them rarely."
>
>> On May 20, 5:19 pm, Kevin Downey <redc...@gmail.com> wrote:
>>> On Sun, May 20, 2012 at 2:13 PM, Warren Lynn <wrn.l...@gmail.com> wrote:
>>> > Maybe for Person/Employee example with very simple functions do not
>>> > need data types, but I don't think that is generally true (isn't
>>> > "defrecord" trying to patching that up?).  When I say "need" I am not
>>> > saying you cannot achieve what you want to do without it (just as
>>> > assembly code can do anything), but things will get so flexible (hence
>>> > the lack of pattern) the language will be "powerful" only on paper
>>> > very soon. I am glad Clojure does not seem to be heading that
>>> > direction, but still I think there might be things we can improve on.
>>>
>>> defrecord, deftype, and defprotocol provide extensible low level
>>> abstractions like the kind Clojure is built on.
>>>
>>> As a Clojure programmer you should only need them rarely.
>>>
>>> As a beginner you should never use them.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> > On May 20, 4:51 pm, Kevin Downey <redc...@gmail.com> wrote:
>>> >> On Sun, May 20, 2012 at 10:22 AM, Warren Lynn <wrn.l...@gmail.com> wrote:
>>> >> > So from what I read  the philosophy of Clojure discourages inheritance
>>> >> > on concrete data types. However, maybe I am too entrenched in my OO
>>> >> > thinking, how do I define a new record type that includes all the data
>>> >> > members of another record type? I am thinking about the classic
>>> >> > Employee/Person example.
>>>
>>> >> Don't make data members. Use maps and multimethods. You don't need
>>> >> types for this. You have data about a thing, keep it has data,
>>> >> suddenly all the functions that work on data structures (select-keys,
>>> >> update-in, clojure.set) all work on your data instead of having your
>>> >> data locked away in a type.
>>>
>>> >> > If I can define a record of Employee with Person's data members
>>> >> > included, even that is not true inheritance (as no protocols of
>>> >> > "Person" will be automatically extended to "Employee"), I need that
>>> >> > for function re-use (so a function working on Person will
>>> >> > automatically work on Employee because Employee is guaranteed to have
>>> >> > all the data members in Person).
>>>
>>> >> > Also, again, maybe I am too OO minded, is there a way inherit another
>>> >> > record type's protocol implementation? That seems to give the best
>>> >> > combination of both worlds (OO and functional), so you can either have
>>> >> > you own very customized combination of data type/protocols, or use the
>>> >> > very common OO pattern. Just like we have both the single-typed
>>> >> > dispatching (which is more OO like and covers a large portion of use
>>> >> > cases), and more advanced multimethods.
>>>
>>> >> > Thanks.
>>>
>>> >> > --
>>> >> > You received this message because you are subscribed to the Google
>>> >> > Groups "Clojure" group.
>>> >> > To post to this group, send email to clojure@googlegroups.com
>>> >> > Note that posts from new members are moderated - please be patient 
>>> >> > with your first post.
>>> >> > To unsubscribe from this group, send email to
>>> >> > clojure+unsubscr...@googlegroups.com
>>> >> > For more options, visit this group at
>>> >> >http://groups.google.com/group/clojure?hl=en
>>>
>>> >> --
>>> >> And what is good, Phaedrus,
>>> >> And what is not good—
>>> >> Need we ask anyone to tell us these things?
>>>
>>> > --
>>> > You received this message because you are subscribed to the Google
>>> > Groups "Clojure" group.
>>> > To post to this group, send email to clojure@googlegroups.com
>>> > Note that posts from new members are moderated - please be patient with 
>>> > your first post.
>>> > To unsubscribe from this group, send email to
>>> > clojure+unsubscr...@googlegroups.com
>>> > For more options, visit this group at
>>> >http://groups.google.com/group/clojure?hl=en
>>>
>>> --
>>> And what is good, Phaedrus,
>>> And what is not good—
>>> Need we ask anyone to tell us these things?
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with your 
>> first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>
>
>
> --
> And what is good, Phaedrus,
> And what is not good—
> Need we ask anyone to tell us these things?



-- 
And what is good, Phaedrus,
And what is not good—
Need we ask anyone to tell us these things?

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to