, list GHCi, , GHC, . :
list = 1 : tail list
main = print list
:
Loop: <<loop>>
primes.
, GHC . , , , , Haskell .
, ( "" ) [1,1], , :
list = 1 : tail list
. , "" ( "" _|_), , head [1,2,3] 1.
(, , list 1 : _|_, " ". , @Justin Li . , .)
, , , " ", Haskell ( , ) , , .
, , . list [1]? , "", n = 1 ( , ) tail list, list, n-1 = 0, [1] , [], , , ?
list = 1 : tail list
= 1 : tail [1] -- use list-so-far
= 1 : []
= [1]
()
list () , Haskell ( . ).
, tail, :
tail l = case l of _:xs -> xs
[] -> error "ack, you dummy!"
"" list Haskell:
-- evaluating `list` using definition of `list`
list = 1 : tail list
-- evaluating `tail list` using definition of `tail`
list = 1 : case list of _:xs -> xs
...
-- evaluating case construct requires matching `list` to
-- a pattern, this requires evaluation of `list` using its defn
list = 1 : case (1 : tail list) of _:xs -> xs
...
-- case pattern match succeeds
list = 1 : let xs = tail list in xs -- just to be clear
= 1 : tail list
-- awesome, now all we need to do is evaluate:
list = 1 : tail list
-- ummm, Houston, we have a problem
- , " ".
. Haskell, Haskell. - , @luqui. , , " ", Haskell, , .