> Perhaps slightly off-topic.
> I have looked at the core-spec document, and had a question regarding the 
> operational semantics part.
> 
> Given the Core expressions:
>> case (let r = 1 : r in r) of (x:xs) -> x
> 
> An interpreter following the semantics would loop on the above expression, as 
> the S_LetRecReturn rule, the one that throws away let-expressions, never 
> applies.
> 
>> case (let r = 1 : r in r) of (x:xs) -> x
> => S_Case + S_LetRec + S_Var
>> case (let r = 1 : r in 1:r) of (x:xs) -> x
> => S_Case + S_LetRec + S_Var
>> case (let r = 1 : r in 1:1:r) of (x:xs) -> x
> etc.

Actually, I don't think it would loop, it would just get stuck:

> case (let r = 1 : r in r) of (x:xs) -> x
=> S_Case + S_LetRec + S_Var
> case (let r = 1 : r in 1:r) of (x:xs) -> x
=> no more rules step apply

The body of the let-expression can not be reduced any further since it is a 
constructor application.
I assume it should not get stuck, right?
So we would need extra step-reduction rules.

-- Christiaan
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to