This is very subjective though . You think they are rarely needed . I agree with you , and I feel we both would not think in terms of nouns and their behaviors when designing an application . But looking at some libraries , and other people ' s code that uses records I can ' t help but notice that records are not used that rarely and mostly overused . Okay , I think I understand where you ' re coming from . I agree that records can be overused . I also agree that people coming from a OOP background can overuse records in a way that ' s unidiomatic . I don ' t think that records inherently complect data and behaviour , though . I view records as tagged maps , and protocols as providing efficient polymorphism over those tags . I don ' t think of protocol methods as belonging to a record , either . I think of them as dispatching off the record type . Effectively just more specialised multimethods . But I think we ' re getting into semantics . You seem to be fine with labelling things according to how they ' re used , whereas I believe that things need to be labeled only according to how they function . Apologies if I ' ve mischaracterised your position at all .