<div dir="ltr">First, thanks for all the help you've offered. Often enough, it's so much that it takes me time to sift through all the good stuff. Thanks again.<div><br></div><div>Okay, I'm in Lesson 10 of <i>Get Programming with Haskell </i> and we're creating an OOP-like world with closures. The first step is a cup object with one attribute, its ounce size. Here's a "constructor"</div><div><br></div><div>cup :: t1 -> (t1 -> t2) -> t2<br></div><div>cup flOz = \message -> message flOz<br></div><div><br></div><div>so this returns upon use</div><div><br></div><div>> myCup = cup 6<br></div><div><br></div><div>myCup which has "internally" a lambda function</div><div><br></div><div>(\message -> message) 6</div><div><br></div><div>waiting, correct?</div><div><br></div><div>Now a "method"</div><div><br></div><div>getOz aCup = aCup (\foz -> foz)<br></div><div><br></div><div>creates a closure on the lambda function (\foz -> foz) . So upon calling</div><div><br></div><div>> getOz myCup</div><div>6</div><div><br></div><div>I'm guessing myCup (\foz -> foz) was evaluated, but I don't understand how the 6 that went in as the bound variable in the constructor came out again with getOz. As I understand it, the cup constructor creates a closure around the given bound argument flOz -- which is confusing because I thought closures "carried" free variables, not bound variables. Perhaps the getOz lambda function (\foz -> foz) replaces completely the (\message -> message) lambda function? So the constructor could have been written</div><div><br></div><div>cup flOz =  (\message -> message) flOz</div><div><br></div><div>In any case I'm shaky on how A) cup 6 sets up/stores the 6 in the creation of myCup and then how getOz pops it out again.</div><div><br></div><div>LB</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div>