Hmm, I see. get-distinct was returning an empty lazyseq, which apparently
made the difference.
On Sunday, December 22, 2013 2:56:01 PM UTC-5, larry google groups wrote:
>
> Hmm, the different return types seem tied to the 2 different functions
> being called, but both functions have the same return type, which is a
> lazyseq. I am using Monger to get data from MongoDb. These functions are
> private:
>
> (defn- get-distinct [request]
> {:pre [(= (type request) clojure.lang.PersistentHashMap)]
> :post [(= (type %) clojure.lang.LazySeq)]}
> (monger/get-distinct (:item-type request)))
>
> (defn- paginate-results [request]
> {:pre [ (= (type request) clojure.lang.PersistentHashMap)]
> :post [(= (type %) clojure.lang.LazySeq)]}
> (monger/paginate-results (:item-type request) (if (:which-page request)
> (:which-page request)
> 0)))
>
> Both of these functions return lazyseqs, as expected. The results from
> both get run through a (reduce) function that does some minor filtering.
> Yet in one case the return type (from the reduce function)
> is clojure.lang.PersistentArrayMap and in the other it
> is clojure.lang.PersistentHashMap. I'd like to be able to write a :post
> condition that enforces strictness, but that seems impossible because I can
> not figure out what the rule is that handles the conversion. I don't care
> if the return type is clojure.lang.PersistentArrayMap
> or clojure.lang.PersistentHashMap, all I want is it for it be consistently
> one or the other.
>
>
>
>
>
> On Sunday, December 22, 2013 2:31:45 PM UTC-5, larry google groups wrote:
>>
>>
>> I am surprised that a map literal is clojure.lang.PersistentArrayMap but
>> as soon as I assign it to a var, it becomes clojure.lang.PersistentHashMap.
>> Are there any rules for being able to predict when these conversions occur?
>>
>> user> (type {})
>> clojure.lang.PersistentArrayMap
>>
>> user> (type {:what "why?"})
>> clojure.lang.PersistentArrayMap
>>
>> user> (def curious {:what "why?"})
>> #'user/curious
>>
>> user> (type curious)
>> clojure.lang.PersistentHashMap
>>
>> user> (def sug (assoc curious :whodoneit "mikey"))
>> #'user/sug
>>
>> user> (type sug)
>> clojure.lang.PersistentHashMap
>>
>> I am curious because I wrote a (reduce) function which mostly just builds
>> a map:
>>
>> (assoc map-of-data (:item-name next-item) next-item))
>>
>> Since I was using assoc I was certain I would
>> get clojure.lang.PersistentHashMap back, but instead I
>> got clojure.lang.PersistentArrayMap.
>>
>>
>>
>>
>>
>>
>>
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.