Lazy evaluation, trying to find out when its done

Hi all, I understand that the take method will evaluate the value inside the cons cell whereas length will just evaluate the spine or structure of the list λ> let y = "abc" Prelude| y :: [Char] λ> :sprint y y = _ λ> take 1 y "a" it :: [Char] λ> :sprint y y = 'a' : _ λ> Well and good but why doesn't the same work on a list of Nums?? λ> let x = [1,2,3] Prelude| x :: Num t => [t] λ> :sprint x x = _ λ> take 1 x [1] it :: Num a => [a] λ> :sprint x x = _ λ> I expected to see x = 1 : _ -- Best Regards, Boon Hui

Maybe this will help answer some questions and raise others: . let x = [1,2,3] . take 1 x [1] . :sprint x x = _ . let x = [1,2,3] :: [Int] . take 1 x [1] . :sprint x x = [1,2,3] Tom On Sun, Oct 09, 2016 at 10:27:22AM +0800, Lai Boon Hui wrote:
Hi all,
I understand that the take method will evaluate the value inside the cons cell whereas length will just evaluate the spine or structure of the list
λ> let y = "abc" Prelude| y :: [Char] λ> :sprint y y = _ λ> take 1 y "a" it :: [Char] λ> :sprint y y = 'a' : _ λ>
Well and good but why doesn't the same work on a list of Nums??
λ> let x = [1,2,3] Prelude| x :: Num t => [t] λ> :sprint x x = _ λ> take 1 x [1] it :: Num a => [a] λ> :sprint x x = _ λ>
I expected to see x = 1 : _
-- Best Regards, Boon Hui
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
participants (2)
-
Lai Boon Hui
-
Tom Murphy