[Haskell-beginners] Re: Hudak state emulation discussion - can you give me some idea?

Benjamin L.Russell DekuDekuplex at Yahoo.com
Tue Mar 17 22:49:35 EDT 2009


On Tue, 17 Mar 2009 14:32:24 +0530, Girish Bhat
<girishbhat6620 at gmail.com> wrote:

>Hi Everyone,
>
>I was going through the classic Hudak paper "Conception, Evolution,
>and Application of Functional Programming".
>Probably the most valuable part is towards the end where he talks
>about how state is represented in Haskell.
>On Page 48 of the PDF (page 406 of the ACM Computing survey volume),
>he gives the following equations
>"For expository purposes we would like to make the state as implicit
>as possible, and thus we express the result as a composition of
>higher-order functions. To facilitate this and to make the result look
>as much like the original program as possible, we define the following
>higher-order infix operators and functions":
>
>
>1 f:=g =\s -> +fs(gs)
>
>2? ?f;g =\s -> g(fs)=\s-+fs(gs)
>
>3? ?f;g =\s -> g(fs)
>
>4 goto f = f
>
>5 f+‘g=\s-+fs+gs
>
>6 f<‘g=\s-+fs<gs
>
>7 if’ p c = \s + (if (p s) then (c s) else s)
>
>
>
>Unfortunately I am unable to parse/understand what he is doing here.
>My closure understanding too seems to be wonky. :)
>Would someone be kind enough to translate each of the above into plain
>english and explain how to read such eqns in the future?

(FYI, there is a copy of the above-mentioned paper that doesn't
require an ACM account available at
http://www.cs.berkeley.edu/~jcondit/pl-prelim/hudak89functional.pdf.)

Hudak is just defining a series of higher-order infix operators and
functions.  (You have made some notational errors in the
above-mentioned notation, so I am revising it to match the paper as
below.)  A backslash denotes a lambda symbol; i.e., whatever
immediately follows the lambda is a parameter in the following
equation.  Specifically:  

>1 f := g =\s -> f s (g s)

In other words, the infix operator ':=' works between functions f and
g such that lambda s -> f s (g s).

>2 f ; g = \s -> g (f s)

In other words, the infix operator ';' works between functions f and g
such that lambda s -> g (f s).

>3? ?f;g =\s -> g(fs)

I couldn't find this equation on p. 406 of the volume; where did you
find it?

>4 goto f = f

In other words, the function "goto" applied to f is defined as simply
f.

>5 f +' g = \s -> f s + g s

In other words, the infix operator '+'' works between functions f and
g such that lambda s -> f s + g s.

>6 f <' g = \s -> f s < g s

In other words, the infix operator '<'' works between functions f and
g such that lambda s -> f s < g s.

>7 if' p c = \s -> (if (p s) then (c s) else s)

In other words, the function "if'" applied to functions p and c is
such that lambda p c -> (if (p s) then (c s) else s).

Hope this helps....

-- Benjamin L. Russell
-- 
Benjamin L. Russell  /   DekuDekuplex at Yahoo dot com
http://dekudekuplex.wordpress.com/
Translator/Interpreter / Mobile:  +011 81 80-3603-6725
"Furuike ya, kawazu tobikomu mizu no oto." 
-- Matsuo Basho^ 



More information about the Beginners mailing list