makeOne 5 -- de ce nu merge? makeOne :: (TreeLike t) Integer -> t Integer -- Haskell nu știe ce implementare să aleagă (pentru ce tip t) cum transform l3 în arbore? -1 -1 4 5 1 2 3 pentru graph, ca arbore (p[dure de arbori): -1 3 8 9 10 5 11 2 7 12 Call by value transfer valoarea orice modificări nu sunt vizibile în exterior Call by sharing transfer referință la valoare Call by reference transfer referință la nume C: f(int i) { i++ } f(5) f(int* p) { p++; (*p).modify() // p este pointer } f(&i) f(int &i) { i++; i = 10 // modificarea este vizibilă la apelant } f(i) Java: f(ob) { ob.modify() // vizibilă la apelant ob = altceva // nicio modificare vizibilă la apelant } Call by need: Haskell f(expr) ... expr -> pot folosi valoarea pentru expr calculată când am avut nevoie în interiorul lui f