TIL that "tagged literals" have an existing meaning in clojure. In my mind, 
the terms "tagged vector" and "tagged literal" were interchangeable. From a 
quick Google search there doesn't seem to be an existing meaning for 
"tagged vector". I think we can agree that it a representation of variants 
in Clojure.

    So given that, if we want to represent a single key/value pair, the 
> most natural way to do it would be:
>
>     [:foreground #color/rgb "ff0000"]
>
>     Variants fulfil the same purpose as key/value pairs in a map. The key 
> denotes a context-sensitive purpose for the data, rather than its type.
>


Could you elaborate on what you mean by variants being like a key value 
pair? Also, for the purposes of discussing variants, we can ignore reader 
tags right? I understand they serve a different purpose. The example in her 
talk had the map

{:type :pickup :store-id 123
 :address nil
 :email nil}

and the equivalent variant was `[:pickup 123]`

If the map was instead

{:pickup {:store-id 123}
 :digital nil
 :delivery nil}

then yes, a variant could be thought of as a key value pair. Is this what 
you meant?


On Sunday, 6 September 2015 13:29:05 UTC+5:30, James Reeves wrote:
>
> On 6 September 2015 at 02:31, Timothy Baldridge <tbald...@gmail.com 
> <javascript:>> wrote:
>
>> >> Thanks, it helps to know using a tagged vector is a real pattern :) 
>>
>> I don't know that it's a "real pattern". If I saw code like this in 
>> production I would probably raise quite a stink about it during code 
>> reviews. It's a cute hack, but it is also an abuse of a data structure. Now 
>> when I see [:foo 42] I don't know if I have a vector of data or a tagged 
>> value. It's a better idea IMO to use something like deftype or defrecord to 
>> communicate the type of something. I'd much rather see #foo.bar.Age{:val 
>> 42} than [:foo.bar/age 42]. At least then when I do (type val) I don't get 
>> clojure.lang.PersistentVector.
>>
>
> I'll have to disagree with you here. To my mind, tagged literals don't 
> quite have the same purpose as variants do.
>
> For example, consider a map:
>
> {:foreground #color/rgb "ff0000"
>  :background #color/rgb "ffffff"}
>
> The hex strings are given a tag to indicate the type of data they contain, 
> while the keys in the map tell us the purpose of that data.
>
> We clearly wouldn't write something like:
>
> #{#foreground {:val #color/rgb "ff0000"}
>   #background {:val #color/rgb "ffffff"}}
>
> So given that, if we want to represent a single key/value pair, the most 
> natural way to do it would be:
>
> [:foreground #color/rgb "ff0000"]
>
> Variants fulfil the same purpose as key/value pairs in a map. The key 
> denotes a context-sensitive purpose for the data, rather than its type.
>
> - James
>

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to