Re: -> operator and monads

2013-04-17 Thread Matthew Hill
Yes, I said that it's *like *function composition in reverse order. And 
only if you apply the function returned by comp, as I did in my example. 
It's not to be taken too literally, but it is perhaps helpful for people 
coming from language that have function composition but no analogue to ->.

On Sunday, 14 April 2013 21:03:20 UTC+1, Marko Topolnik wrote:
>
> On Sunday, April 14, 2013 7:51:10 PM UTC+2, Matthew Hill wrote:
>
>> Function composition is done via comp. Using -> and ->> is like function 
>> composition in reverse order (though there's a difference between how the 
>> two thread return values), and often it reads more naturally.
>
>
> -> applies the functions immediately whereas comp returns a new function 
> that is the composition of its arguments. 
>
> -> works with functions of any arity; comp only with unary functions.
>
> As pointed out above, -> merely combines the unevaluated forms it is 
> given, and only if they happen to be function application forms will the 
> result be similar to function composition.
>
> -marko
>

-- 
-- 
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/groups/opt_out.




Re: -> operator and monads

2013-04-14 Thread Ben Wolfson
On Sun, Apr 14, 2013 at 1:03 PM, Marko Topolnik wrote:

> On Sunday, April 14, 2013 7:51:10 PM UTC+2, Matthew Hill wrote:
>
>> Function composition is done via comp. Using -> and ->> is like function
>> composition in reverse order (though there's a difference between how the
>> two thread return values), and often it reads more naturally.
>
>
> -> applies the functions immediately whereas comp returns a new function
> that is the composition of its arguments.
>
> -> works with functions of any arity; comp only with unary functions.
>
> As pointed out above, -> merely combines the unevaluated forms it is
> given, and only if they happen to be function application forms will the
> result be similar to function composition.
>

Even that's somewhat misleading.

user=> (defn make-adder [n] (fn [x] (+ n x)))
#'user/make-adder
user=> ((comp println (make-adder 4)) 3)
7
nil
user=> (-> 3 (make-adder 4) println)
ArityException Wrong number of args (2) passed to: user$make-adder
clojure.lang.AFn.throwArity (AFn.java:437)
user=> (-> 3 ((make-adder 4)) println)
7
nil

(make-adder 4) is a "function application form" but the result isn't
similar to function composition because the threading operators rewrite
their arguments, so we end up with (make-adder 3 4). If it were expected
that all arguments but the first would be functions, rather than lists
corresponding to function-invocations-with-one-argument-deleted, then ->
*could* be equivalent to function composition (and could be written as a
regular function):

user=> (defn ->* [a & cs] ((apply comp (reverse cs)) a))
#'user/->*
user=> (->* 3 (make-adder 4) println)
7
nil
user=> (->* [1 2 3] (partial map inc) set #(contains? % 4))
true


-- 
Ben Wolfson
"Human kind has used its intelligence to vary the flavour of drinks, which
may be sweet, aromatic, fermented or spirit-based. ... Family and social
life also offer numerous other occasions to consume drinks for pleasure."
[Larousse, "Drink" entry]

-- 
-- 
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/groups/opt_out.




Re: -> operator and monads

2013-04-14 Thread Marko Topolnik
On Sunday, April 14, 2013 7:51:10 PM UTC+2, Matthew Hill wrote:

> Function composition is done via comp. Using -> and ->> is like function 
> composition in reverse order (though there's a difference between how the 
> two thread return values), and often it reads more naturally.


-> applies the functions immediately whereas comp returns a new function 
that is the composition of its arguments. 

-> works with functions of any arity; comp only with unary functions.

As pointed out above, -> merely combines the unevaluated forms it is given, 
and only if they happen to be function application forms will the result be 
similar to function composition.

-marko

-- 
-- 
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/groups/opt_out.




Re: -> operator and monads

2013-04-14 Thread Matthew Hill
Function composition is done via comp. Using -> and ->> is like function 
composition in reverse order (though there's a difference between how the 
two thread return values), and often it reads more naturally.

user> (-> [1 2 5] rest first)
2
user> ((comp first rest) [1 2 5])
2

On Wednesday, 3 April 2013 19:21:43 UTC+1, Plinio Balduino wrote:
>
> Hi there
>
> Is it correct to say that -> operator is a kind of monad in Clojure?
>
> Thank you in advance.
>
> Plínio Balduino
>  

-- 
-- 
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/groups/opt_out.




Re: -> operator and monads

2013-04-04 Thread Marko Topolnik
Isn't the dot just like Clojure's *comp*? As Allan correctly points out, 
the thrushes are macros that combine the given forms in a specified way, 
which only under certain constraints has the effect of composing function 
applications, whereas *comp* is truly a function composition operator.

On Thursday, April 4, 2013 4:25:18 PM UTC+2, Maik Schünemann wrote:
>
> if you come from the haskell world, it is like . piplining - but in 
> reverse order
> I needed some time to get used to it but I really like -> ->> as-> ... to 
> structure my code. 
> It helps to see the sequence of functions that operate on your data
>
>
> On Wed, Apr 3, 2013 at 11:05 PM, Alan Malloy 
> > wrote:
>
>> Not even that: -> is not a function composition operator at all, but a 
>> form-rewriting macro. You can perfectly well write (-> [x xs] (for (inc 
>> x))) to get (for [x xs] (inc x)), and that is not composing any functions. 
>> The two things are entirely separate.
>>
>>
>> On Wednesday, April 3, 2013 12:45:55 PM UTC-7, Marko Topolnik wrote:
>>>
>>> I guess you mean the monadic bind operation, but -> is not it. The only 
>>> conceptual connection between *bind* and -> is that they are both some 
>>> kind of function composition operators.
>>>
>>> -marko
>>>
>>> On Wednesday, April 3, 2013 8:21:43 PM UTC+2, Plinio Balduino wrote:

 Hi there

 Is it correct to say that -> operator is a kind of monad in Clojure?

 Thank you in advance.

 Plínio Balduino
  
>>>  -- 
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@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+u...@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+u...@googlegroups.com .
>> For more options, visit https://groups.google.com/groups/opt_out.
>>  
>>  
>>
>
>

-- 
-- 
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/groups/opt_out.




Re: -> operator and monads

2013-04-04 Thread Maik Schünemann
if you come from the haskell world, it is like . piplining - but in reverse
order
I needed some time to get used to it but I really like -> ->> as-> ... to
structure my code.
It helps to see the sequence of functions that operate on your data


On Wed, Apr 3, 2013 at 11:05 PM, Alan Malloy  wrote:

> Not even that: -> is not a function composition operator at all, but a
> form-rewriting macro. You can perfectly well write (-> [x xs] (for (inc
> x))) to get (for [x xs] (inc x)), and that is not composing any functions.
> The two things are entirely separate.
>
>
> On Wednesday, April 3, 2013 12:45:55 PM UTC-7, Marko Topolnik wrote:
>>
>> I guess you mean the monadic bind operation, but -> is not it. The only
>> conceptual connection between *bind* and -> is that they are both some
>> kind of function composition operators.
>>
>> -marko
>>
>> On Wednesday, April 3, 2013 8:21:43 PM UTC+2, Plinio Balduino wrote:
>>>
>>> Hi there
>>>
>>> Is it correct to say that -> operator is a kind of monad in Clojure?
>>>
>>> Thank you in advance.
>>>
>>> Plínio Balduino
>>>
>>  --
> --
> 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/groups/opt_out.
>
>
>

-- 
-- 
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/groups/opt_out.




Re: -> operator and monads

2013-04-03 Thread Alan Malloy
Not even that: -> is not a function composition operator at all, but a 
form-rewriting macro. You can perfectly well write (-> [x xs] (for (inc 
x))) to get (for [x xs] (inc x)), and that is not composing any functions. 
The two things are entirely separate.

On Wednesday, April 3, 2013 12:45:55 PM UTC-7, Marko Topolnik wrote:
>
> I guess you mean the monadic bind operation, but -> is not it. The only 
> conceptual connection between *bind* and -> is that they are both some 
> kind of function composition operators.
>
> -marko
>
> On Wednesday, April 3, 2013 8:21:43 PM UTC+2, Plinio Balduino wrote:
>>
>> Hi there
>>
>> Is it correct to say that -> operator is a kind of monad in Clojure?
>>
>> Thank you in advance.
>>
>> Plínio Balduino
>>  
>

-- 
-- 
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/groups/opt_out.




Re: -> operator and monads

2013-04-03 Thread Plínio Balduino
Now it's clear.

Thank you

Plínio


On Wed, Apr 3, 2013 at 4:45 PM, Marko Topolnik wrote:

> I guess you mean the monadic bind operation, but -> is not it. The only
> conceptual connection between *bind* and -> is that they are both some
> kind of function composition operators.
>
> -marko
>
>
> On Wednesday, April 3, 2013 8:21:43 PM UTC+2, Plinio Balduino wrote:
>>
>> Hi there
>>
>> Is it correct to say that -> operator is a kind of monad in Clojure?
>>
>> Thank you in advance.
>>
>> Plínio Balduino
>>
>  --
> --
> 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/groups/opt_out.
>
>
>

-- 
-- 
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/groups/opt_out.




Re: -> operator and monads

2013-04-03 Thread Marko Topolnik
I guess you mean the monadic bind operation, but -> is not it. The only 
conceptual connection between *bind* and -> is that they are both some kind 
of function composition operators.

-marko

On Wednesday, April 3, 2013 8:21:43 PM UTC+2, Plinio Balduino wrote:
>
> Hi there
>
> Is it correct to say that -> operator is a kind of monad in Clojure?
>
> Thank you in advance.
>
> Plínio Balduino
>  

-- 
-- 
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/groups/opt_out.




-> operator and monads

2013-04-03 Thread Plínio Balduino
Hi there

Is it correct to say that -> operator is a kind of monad in Clojure?

Thank you in advance.

Plínio Balduino

-- 
-- 
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/groups/opt_out.