I've forgotten what I intended in the STG paper, but GHC's Core language certainly allows case on a function; all it does is to force the function to head normal form.
Simon | -----Original Message----- | From: ghc-devs [mailto:[email protected]] On Behalf Of William | Knop | Sent: 18 June 2014 23:54 | To: [email protected] | Subject: Re: Case expressions in STG | | Hi Tom, | | SPJ is surely more qualified to answer than I, but I'll take a stab. | | In general, it is computationally infeasible to compare functions. | Granted, in your example, the function isn't being compared-- and | therefore the case expr is extraneous. I don't think there exists a | feasible, uncontrived example, so I imagine that's why STG forbids it | (though I don't know where it's specified). | | Cheers, | Will | | | > On Jun 18, 2014, at 9:43 AM, Tom Ellis <tom-lists-ghc- | [email protected]> wrote: | > | > I am reading SPJ's seminal work "Implementing lazy functional languages | on | > stock hardware: the Spinless Tagless G-machine" (1992). The paper is | > available here | > | > http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.53.3729 | > | > On p62 we see "The expression scrutinised by a case expression must | > eventually evaluate either to a primitive value or a constructor | > application.". | > | > This doesn't make sense to me. Isn't the following a valid STG | program? | > What am I missing? Where is it specified that the scrutinee of a case | > expression cannot be of a function type? | > | > {x} \n {z} -> let f = \{x} \n {y} -> g x y | > in case f of f' -> f' z | > | > Thanks, | > | > Tom | > _______________________________________________ | > ghc-devs mailing list | > [email protected] | > http://www.haskell.org/mailman/listinfo/ghc-devs | _______________________________________________ | ghc-devs mailing list | [email protected] | http://www.haskell.org/mailman/listinfo/ghc-devs _______________________________________________ ghc-devs mailing list [email protected] http://www.haskell.org/mailman/listinfo/ghc-devs
