[RFC] Bang constraint

Gabor Greif ggreif at gmail.com
Thu Apr 4 00:20:27 CEST 2013


Hi Roman,

I'd say it would be an empty constraint, since the directory
associated with (!) is empty. So this would be trivially satisfied.

There is however another possibility, something like `seq`. So both
arguments would always be normalized to WHNF before the function f is
called. Same for the result. Of course this constraint still would not
rule out

> f a b = f a b

so no big gain here.

Implementing the latter would be more ambitious, introducing basically
the same sort of 'magic' as with ! on data.

Cheers,

    Gabor

On 4/3/13, Roman Cheplyaka <roma at ro-che.info> wrote:
> So, what exactly does this constraint mean outside of data declarations?
>
> E.g. how do we interpret
>
>   f :: (!a) => a -> a -> a
>
> ?
>
> * Gabor Greif <ggreif at gmail.com> [2013-04-03 20:06:03+0200]
>> Now that Constraint kinds are pretty much into the mainstream, can we
>> consider the '!' annotation in data declarations as a magic
>> constraint? Not unlike NFData, but only ensuring that said value is in
>> WHNF.
>>
>> So the following definitions would be semantically identical
>>
>> > newtype Foo a = Foo a
>>
>> > data Foo a = Foo !a
>>
>> > data Foo a = (!a) => Foo a
>>
>> > data FooC :: (* -> Constraint) -> * -> * where
>> >   Foo :: c a => a -> FooC c a
>> > type Foo a = FooC ! a
>>
>> It just occured to me and seemed plausible at first thought, but feel
>> free to flame me because of the magic-ness.
>>
>> Cheers,
>>
>>     Gabor
>>
>> _______________________________________________
>> ghc-devs mailing list
>> ghc-devs at haskell.org
>> http://www.haskell.org/mailman/listinfo/ghc-devs
>



More information about the ghc-devs mailing list