Correct. However I'd like to use documentation and generative abilities of
clojure.spec. I could directly deref inside my functions and then
everything would work nicely. However, That would raise efficiency concerns.
I would say in my case derefing doesn't cause a huge problem, and writing
some spec-creator like =(my.specs/deref ::my-message)= might not be that
bad; But I was seeking some advise from you. How would you spec something
like this? My initial thought is something like this:
(defn get-messages [& args] ...)
(s/fdef get-messages
:args ::get-messages-args
:ret (my.specs/deref (my.specs/api-result ::api-message)))
On Sunday, October 30, 2016 at 3:10:37 AM UTC+3:30, tbc++ wrote:
>
> Specs are for checking the shape of data. "deferreds" are not data, they
> are opaque objects. So in short the answer is "you can't" or more
> correctly: you may be able to, but shouldn't.
>
> One of the problems with even trying to spec something like IDeref is that
> the very act of observing it may have a side effect. For example: (delay
> (launch-missiles)). The only way you can see if that conforms to some spec
> is by calling `deref` on it which would have the side effect of launching
> some missiles. This sort of thing follows the same advice Clojure has had
> for some time...put data inside IDerefs don't put IDerefs inside data.
>
> On Sat, Oct 29, 2016 at 10:38 AM, Mohammad Sadeq Khoeini <
> [email protected] <javascript:>> wrote:
>
>>
>> I'm trying to write a wrapper for telegram api[1]. Responses from the api
>> are either successful,
>> which would then have a `{"ok": true, result: ...}` shape, or error with
>> the shape of `{"ok": false, description: "..."}`.
>> Also, I'm using aleph to call the api. So, the responses are deferreds
>> [2].
>>
>> Now, I want to write spec for my functions like get-messages, etc. But
>> the problem is I have no clue how I can model something like this.
>> It appears to me that I want to model something like generics of other
>> languages. i.e. IDeref<Message>. But I can't see any straight forward way
>> to do so using clojure.spec.
>>
>> What would you say be the idiomatic approach to model this.
>>
>>
>> [1]: https://core.telegram.org/bots/api
>> [2]: http://aleph.io/manifold/deferreds.html
>>
>> BR.
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to [email protected]
>> <javascript:>
>> 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] <javascript:>
>> 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] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> --
> “One of the main causes of the fall of the Roman Empire was that–lacking
> zero–they had no way to indicate successful termination of their C
> programs.”
> (Robert Firth)
>
--
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/d/optout.