Re: [Haskell-cafe] Re: currying combinators

2010-05-26 Thread Yitzchak Gale
I wrote:
 keep :: ((t -  b) -  u -  b) -  ((t1 -  t) -  b) -  (t1 -  u) - b
 so then
 nameZip = keep (drop' . drop') names

Günther Schmidt wrote:
 don't be tease man, show me what you got :)

Ivan Miljenovic wrote:
 Methinks Yitzchak made a typo

Yes, sorry about that. Tested in ghci this time :).

keep :: (forall c . (t -  c) -  u -  c) -  ((t1 -  t) -  b) -
(t1 -  u) - b
keep transform rec = \fn - rec $ transform id . fn

Regards,
Yitz
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: currying combinators

2010-05-26 Thread Yitzchak Gale
I wrote:
 keep :: (forall c . (t -  c) -  u -  c) -  ((t1 -  t) -  b) - (t1 -  
 u) - b
 keep transform rec = \fn - rec $ transform id . fn

Just to clarify - you don't really need the RankNTypes here, I just
wrote it that way so you could see what I had been thinking,
and to make it clear how the first parameter of keep
takes transformers like drop'. But you could write it as

keep :: ((t - t) - u - t) - ...

and it would work just fine, because transformers like drop'
would specialize nicely to what you need for keep.

If you let GHC deduce the type of keep from its definition,
GHC comes up with something else:

keep :: ((a - a) - u - t) - ((t1 - t) - b) - (t1 - u) - b

That also works, but it's weird. It generalizes in a direction
that we don't really need here, and thus obscures the meaning
of what we're doing.

Regards,
Yitz
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: currying combinators

2010-05-25 Thread Günther Schmidt

Hi Yitz,

embarrassingly I was unable to deduce the implementation from the type 
signature, don't be tease man, show me what you got :)


Günther

Am 25.05.10 18:27, schrieb Yitzchak Gale:

Günther Schmidt wrote:

http://www.hpaste.org/fastcgi/hpaste.fcgi/view?id=25694
in which I attempt to develop a currying combinator library.
I'm stuck at some point and would appreciate any help.


How about this:

keep :: ((t -  b) -  u -  b) -  ((t1 -  t) -  b) -  (t1 -  u) -  b

so then

nameZip = keep (drop' . drop') names

Regards,
Yitz



___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: currying combinators

2010-05-25 Thread Daniel Peebles
Djinn can't figure it out, and neither can I :P

2010/5/25 Günther Schmidt gue.schm...@web.de

 Hi Yitz,

 embarrassingly I was unable to deduce the implementation from the type
 signature, don't be tease man, show me what you got :)

 Günther

 Am 25.05.10 18:27, schrieb Yitzchak Gale:

  Günther Schmidt wrote:

 http://www.hpaste.org/fastcgi/hpaste.fcgi/view?id=25694
 in which I attempt to develop a currying combinator library.
 I'm stuck at some point and would appreciate any help.


 How about this:

 keep :: ((t -  b) -  u -  b) -  ((t1 -  t) -  b) -  (t1 -  u) -
  b

 so then

 nameZip = keep (drop' . drop') names

 Regards,
 Yitz



 ___
 Haskell-Cafe mailing list
 Haskell-Cafe@haskell.org
 http://www.haskell.org/mailman/listinfo/haskell-cafe

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Currying and Partial Evaluation

2008-01-09 Thread Fernando Rodriguez

Hello Jules,



I'm not sure you got a straight answer, although you provoked some
discussion.


Thanks for your answer, now everything is much clearer. 




___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Currying and Partial Evaluation

2008-01-09 Thread Achim Schneider
Derek Elkins [EMAIL PROTECTED] wrote:

 Can we stop using confusing, misleading or outright wrong definitions
 and analogies?

No, we can't, ever, that's plain impossible. And will never stop to use
enlightening, inspiring or vastly approximate or aggregate definitions
and analogies, and I won't stop laughing about my mistakes.

-- 
(c) this sig last receiving data processing entity. Inspect headers for
past copyright information. All rights reserved. Unauthorised copying,
hiring, renting, public performance and/or broadcasting of this
signature prohibited. 

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Currying and Partial Evaluation

2008-01-08 Thread Achim Schneider
Fernando Rodriguez [EMAIL PROTECTED] wrote:

 
 Hi,
 
 Is currying in Haskell the same thing as Partial Evaluation
 (http://en.wikipedia.org/wiki/Partial_evaluation)? Am I getting
 partial evaluation for free just by using Haskell? 
 
No, currying is this:

Prelude let f x y = 1 + x * ( y - 3 )
Prelude let g = f 1
Prelude let h = f 2
Prelude g 1
-1
Prelude g 2
0
Prelude h 1
-3
Prelude h 2
-1

or, a bit more confusing and possibly enlightening,

Prelude let y f = f $ y f
Prelude :t y
y :: (b - b) - b
Prelude let fixpoint f n = if n = 1 then 1 else n * (f $ n - 1)
Prelude :t fixpoint
fixpoint :: (Num b, Ord b) = (b - b) - b - b
Prelude let fac = y fixpoint
Prelude :t fac
fac :: Integer - Integer
Prelude fac 10
3628800

Prelude fac 100
933262154439441526816992388562667004907159682643816214685929638952175
3229915608941463976156518286253697920827223758251185210916864


Note that fixpoint 3 won't work, and that's good.


-- 
(c) this sig last receiving data processing entity. Inspect headers for
past copyright information. All rights reserved. Unauthorised copying,
hiring, renting, public performance and/or broadcasting of this
signature prohibited. 

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: Currying and Partial Evaluation

2008-01-08 Thread Derek Elkins
On Wed, 2008-01-09 at 00:51 +0100, Achim Schneider wrote:
 Fernando Rodriguez [EMAIL PROTECTED] wrote:
 
  
  Hi,
  
  Is currying in Haskell the same thing as Partial Evaluation
  (http://en.wikipedia.org/wiki/Partial_evaluation)? Am I getting
  partial evaluation for free just by using Haskell? 
  
 No, currying is this:

No, it is not.  This is partial application.  See the wiki page Neil
referenced.

 
 Prelude let f x y = 1 + x * ( y - 3 )
 Prelude let g = f 1
 Prelude let h = f 2
 Prelude g 1
 -1
 Prelude g 2
 0
 Prelude h 1
 -3
 Prelude h 2
 -1
 
 or, a bit more confusing and possibly enlightening,
 
 Prelude let y f = f $ y f
 Prelude :t y
 y :: (b - b) - b
 Prelude let fixpoint f n = if n = 1 then 1 else n * (f $ n - 1)
 Prelude :t fixpoint
 fixpoint :: (Num b, Ord b) = (b - b) - b - b
 Prelude let fac = y fixpoint
 Prelude :t fac
 fac :: Integer - Integer
 Prelude fac 10
 3628800
 
 Prelude fac 100
 933262154439441526816992388562667004907159682643816214685929638952175
 3229915608941463976156518286253697920827223758251185210916864
 
 
 Note that fixpoint 3 won't work, and that's good.
 
 

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: Currying and Partial Evaluation

2008-01-08 Thread Derek Elkins
On Wed, 2008-01-09 at 03:37 +0100, Achim Schneider wrote:
 Derek Elkins [EMAIL PROTECTED] wrote:
 
  On Wed, 2008-01-09 at 00:51 +0100, Achim Schneider wrote:
   Fernando Rodriguez [EMAIL PROTECTED] wrote:
   

Hi,

Is currying in Haskell the same thing as Partial Evaluation
(http://en.wikipedia.org/wiki/Partial_evaluation)? Am I getting
partial evaluation for free just by using Haskell? 

   No, currying is this:
  
  No, it is not.  This is partial application.  See the wiki page Neil
  referenced.
  
 Which works because of the functions being curried...

and therefore partial application can't be currying.  Currying is the
operation of turning (a,b) - c into a - b - c.  Nothing more.

  of course, the
 usage is to partly apply a function, which is not possible, as all
 Haskell functions are, by default, curried, and thus only have one
 parameter, which can either be applied or not.

Indeed.  Partial application is a fuzzy term.  I give a potential
objective definition here:
http://lambda-the-ultimate.org/node/2266#comment-33620

 
 Partial evaluation, OTOH, goes into the direction of laziness vs.
 eagerness: Iff the compiler sees that a thunk is only dependent on data
 known at compile-time, it may choose to evaluate this thunk already at
 compile-time, if you're lucky and the compiler isn't lazy,

Partial evaluation has little to do with lazy v. eager evaluation.

 main = putStrLn $ show $ 1 + 2
 
 might end up being
 
 main = putStrLn 3
 
 in the object file.
 
 

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Currying and Partial Evaluation

2008-01-08 Thread Achim Schneider
Derek Elkins [EMAIL PROTECTED] wrote:

 On Wed, 2008-01-09 at 00:51 +0100, Achim Schneider wrote:
  Fernando Rodriguez [EMAIL PROTECTED] wrote:
  
   
   Hi,
   
   Is currying in Haskell the same thing as Partial Evaluation
   (http://en.wikipedia.org/wiki/Partial_evaluation)? Am I getting
   partial evaluation for free just by using Haskell? 
   
  No, currying is this:
 
 No, it is not.  This is partial application.  See the wiki page Neil
 referenced.
 
Which works because of the functions being curried... of course, the
usage is to partly apply a function, which is not possible, as all
Haskell functions are, by default, curried, and thus only have one
parameter, which can either be applied or not.

Partial evaluation, OTOH, goes into the direction of laziness vs.
eagerness: Iff the compiler sees that a thunk is only dependent on data
known at compile-time, it may choose to evaluate this thunk already at
compile-time, if you're lucky and the compiler isn't lazy,

main = putStrLn $ show $ 1 + 2

might end up being

main = putStrLn 3

in the object file.


-- 
(c) this sig last receiving data processing entity. Inspect headers for
past copyright information. All rights reserved. Unauthorised copying,
hiring, renting, public performance and/or broadcasting of this
signature prohibited. 

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Currying and Partial Evaluation

2008-01-08 Thread Achim Schneider
Derek Elkins [EMAIL PROTECTED] wrote:

 On Wed, 2008-01-09 at 03:37 +0100, Achim Schneider wrote:
  Derek Elkins [EMAIL PROTECTED] wrote:
  
   On Wed, 2008-01-09 at 00:51 +0100, Achim Schneider wrote:
Fernando Rodriguez [EMAIL PROTECTED] wrote:

 
 Hi,
 
 Is currying in Haskell the same thing as Partial Evaluation
 (http://en.wikipedia.org/wiki/Partial_evaluation)? Am I
 getting partial evaluation for free just by using Haskell? 
 
No, currying is this:
   
   No, it is not.  This is partial application.  See the wiki page
   Neil referenced.
   
  Which works because of the functions being curried...
 
 and therefore partial application can't be currying.  Currying is the
 operation of turning (a,b) - c into a - b - c.  Nothing more.
 
   of course, the
  usage is to partly apply a function, which is not possible, as all
  Haskell functions are, by default, curried, and thus only have one
  parameter, which can either be applied or not.
 
 Indeed.  Partial application is a fuzzy term.  I give a potential
 objective definition here:
 http://lambda-the-ultimate.org/node/2266#comment-33620
 
Yes, it seems kind of obvious that eating a chicken isn't the same as
currying a chicken, but then there's a difference between eating
a grilled and a curried chicken... and cooking is always more complex
than eating. And you just can't have a curried chicken when there's
no one around that curries them.

So, currying can also be the operation of turning

(define (foo x y) (+ x y))

into

foo x y = x + y

or, mere syntactically,

foo x y = x + y

into

foo = \x - \y - x + y
 
  
  Partial evaluation, OTOH, goes into the direction of laziness vs.
  eagerness: Iff the compiler sees that a thunk is only dependent on
  data known at compile-time, it may choose to evaluate this thunk
  already at compile-time, if you're lucky and the compiler isn't
  lazy,
 
 Partial evaluation has little to do with lazy v. eager evaluation.
 
Well, enough for a thunk to be a reasonable metaphor for a candidate
partial evaluation. The compiler is eager, so that the result is
memoized before it is used... or not, but then that may not be
deducible for the compiler. It's a bit like stop and go traffic.
Opportunistic evaluation probably fits the concept better than
eager.


Can we stop nit-picking, please?

-- 
(c) this sig last receiving data processing entity. Inspect headers for
past copyright information. All rights reserved. Unauthorised copying,
hiring, renting, public performance and/or broadcasting of this
signature prohibited. 

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: Currying and Partial Evaluation

2008-01-08 Thread Derek Elkins
On Wed, 2008-01-09 at 04:32 +0100, Achim Schneider wrote:
 Derek Elkins [EMAIL PROTECTED] wrote:
 
  On Wed, 2008-01-09 at 03:37 +0100, Achim Schneider wrote:
   Derek Elkins [EMAIL PROTECTED] wrote:
   
On Wed, 2008-01-09 at 00:51 +0100, Achim Schneider wrote:
 Fernando Rodriguez [EMAIL PROTECTED] wrote:
 
  
  Hi,
  
  Is currying in Haskell the same thing as Partial Evaluation
  (http://en.wikipedia.org/wiki/Partial_evaluation)? Am I
  getting partial evaluation for free just by using Haskell? 
  
 No, currying is this:

No, it is not.  This is partial application.  See the wiki page
Neil referenced.

   Which works because of the functions being curried...
  
  and therefore partial application can't be currying.  Currying is the
  operation of turning (a,b) - c into a - b - c.  Nothing more.
  
of course, the
   usage is to partly apply a function, which is not possible, as all
   Haskell functions are, by default, curried, and thus only have one
   parameter, which can either be applied or not.
  
  Indeed.  Partial application is a fuzzy term.  I give a potential
  objective definition here:
  http://lambda-the-ultimate.org/node/2266#comment-33620
  
 Yes, it seems kind of obvious that eating a chicken isn't the same as
 currying a chicken, but then there's a difference between eating
 a grilled and a curried chicken... and cooking is always more complex
 than eating. And you just can't have a curried chicken when there's
 no one around that curries them.
 
 So, currying can also be the operation of turning
 
 (define (foo x y) (+ x y))
 
 into
 
 foo x y = x + y
 
 or, mere syntactically,
 
 foo x y = x + y
 
 into
 
 foo = \x - \y - x + y
  
   
   Partial evaluation, OTOH, goes into the direction of laziness vs.
   eagerness: Iff the compiler sees that a thunk is only dependent on
   data known at compile-time, it may choose to evaluate this thunk
   already at compile-time, if you're lucky and the compiler isn't
   lazy,
  
  Partial evaluation has little to do with lazy v. eager evaluation.
  
 Well, enough for a thunk to be a reasonable metaphor for a candidate
 partial evaluation. The compiler is eager, so that the result is
 memoized before it is used... or not, but then that may not be
 deducible for the compiler. It's a bit like stop and go traffic.
 Opportunistic evaluation probably fits the concept better than
 eager.
 
 
 Can we stop nit-picking, please?

Can we stop using confusing, misleading or outright wrong definitions
and analogies?  This is how we end up with people thinking 'currying' =
'partial application' = 'partial evaluation' or 'laziness' =
'memoization' or 'monads' = 'state passing' = 'continuations' or 'type
classes' = 'OO classes'

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: Currying and Partial Evaluation

2008-01-08 Thread Jonathan Cast

On 8 Jan 2008, at 7:56 PM, Derek Elkins wrote:

Can we stop using confusing, misleading or outright wrong definitions
and analogies?


What, and bring CS to a halt?

jcc

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: Currying and Partial Evaluation

2008-01-08 Thread Derek Elkins
On Tue, 2008-01-08 at 21:44 -0800, Jonathan Cast wrote:
 On 8 Jan 2008, at 7:56 PM, Derek Elkins wrote:
  Can we stop using confusing, misleading or outright wrong definitions
  and analogies?
 
 What, and bring CS to a halt?

CS wouldn't be the only thing brought to a halt...

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: Currying and Partial Evaluation

2008-01-08 Thread Jonathan Cast

On 8 Jan 2008, at 9:01 PM, Derek Elkins wrote:


On Tue, 2008-01-08 at 21:44 -0800, Jonathan Cast wrote:

On 8 Jan 2008, at 7:56 PM, Derek Elkins wrote:
Can we stop using confusing, misleading or outright wrong  
definitions

and analogies?


What, and bring CS to a halt?


CS wouldn't be the only thing brought to a halt...


Good point.  We're really discussing what, the end of humanity as we  
know it?


jcc

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Currying

2007-01-18 Thread Stephane Bortzmeyer
On Thu, Jan 18, 2007 at 11:00:26AM +0100,
 [EMAIL PROTECTED] [EMAIL PROTECTED] wrote 
 a message of 15 lines which said:

 what is so great about currying?

The name is very cool.
 
 What are its uses, apart from letting one define functions with less
 parentheses?  

Partial applications.

http://fr.wikipedia.org/wiki/Curryfication

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Currying

2007-01-18 Thread Johan Grönqvist

[EMAIL PROTECTED] skrev:

Hello,

what is so great about currying?

What are its uses, apart from letting one define functions with less
parentheses?


Letting one apply them with less extra characters:

add x y = x + y
map (add 2) [1..5]

instead of
add (x,y) = x + y
let add2 y = add(2,y) in map add2 [1..5] end

(The last might not technically be partial application, but it serves 
the same purpose without using currying.)


I believe it makes code shorter and more readable, but I do not believe 
it gives more power.


/ johan

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe