I was actually trying to avoid that, thinking that it'd be best if SCC uniformly
worked for top-levels and expressions. But then this new form:

    {-# SCC f "f_scc" #-}

Would only work for toplevel SCCs.. So maybe it's OK to introduce a new pragma
here.

2016-06-01 8:13 GMT-04:00 Richard Eisenberg <e...@cis.upenn.edu>:
> What about just using a new pragma?
>
>> {-# SCC_FUNCTION f "f_scc" #-}
>> f True = ...
>> f False = ...
>
> The pragma takes the name of the function (a single identifier) and the name 
> of the SCC. If you wish both to have the same name, you can leave off the SCC 
> name.
>
> It seems worth it to me to introduce a new pragma here.
>
> Richard
>
> On May 30, 2016, at 3:14 PM, Ömer Sinan Ağacan <omeraga...@gmail.com> wrote:
>
>> I'm trying to support SCCs at the top-level. The implementation should be
>> trivial except the parsing part turned out to be tricky. Since expressions 
>> can
>> appear at the top-level, after a {-# SCC ... #-} parser can't decide whether 
>> to
>> reduce the token in `sigdecl` to generate a `(LHsDecl (Sig (SCCSig ...)))` 
>> or to
>> keep shifting to parse an expression. As shifting is the default behavior 
>> when a
>> shift/reduce conflict happens, it's always trying to parse an expression, 
>> which
>> is always the wrong thing to do.
>>
>> Does anyone have any ideas on how to handle this?
>>
>> Motivation: Not having SCCs at the top level is becoming annoying real quick.
>> For simplest cases, it's possible to do this transformation:
>>
>>    f x y = ...
>>    =>
>>    f = {-# SCC f #-} \x y -> ...
>>
>> However, it doesn't work when there's a `where` clause:
>>
>>    f x y = <t is in scope>
>>      where t = ...
>>    =>
>>    f = {-# SCC f #-} \x y -> <t is out of scope>
>>      where t = ...
>>
>> Or when we have a "equation style" definition:
>>
>>    f (C1 ...) = ...
>>    f (C2 ...) = ...
>>    f (C3 ...) = ...
>>    ...
>>
>> (usual solution is to rename `f` to `f'` and define a new `f` with a `SCC`)
>> _______________________________________________
>> ghc-devs mailing list
>> ghc-devs@haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to