[Haskell-cafe] Stupid newbie question

Brian Hurt bhurt at spnz.org
Fri Jan 5 20:17:33 EST 2007


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


More information about the Haskell-Cafe mailing list