My apologies for wasting bandwidth on what I'm sure is a stupid newbie question.

Given:

-- Reimplementing the wheel here, I know

data Option a = Some a | Empty
        deriving (Eq,Ord,Show,Read)

nth 0 (x:xs) = Some x
nth i (x:xs) = if i < 0 then Empty else nth (i-1) xs
nth i [] = Empty

That:

nth 1000000 [1..10000000]

returns the right answer, while:

nth 1000000 [1..]

blows stack.  Furthermore, given:

makelist i = i : (makelist (i-1))

Why is it that:
nth 1000000 (makelist 1)

blows stack? What are the rules for being tail recursive in Haskell? I'm an Ocaml programmer, so I'm familiar with this problem, I just don't see the solution. Some help would be appreciated.

Thanks in advance,
Brian
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to