# [RFC] Bang constraint

5 messages
Open this post in threaded view
|

## [RFC] Bang constraint

 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
Open this post in threaded view
|

## [RFC] Bang constraint

 On 04/03/2013 02:06 PM, Gabor Greif wrote: > 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 > [...] These two are not identical because    f (Foo _) = 3 forces the value if it's 'data' but not if it's 'newtype'. That's irrelevant to your interesting proposal, however. -Isaac
Open this post in threaded view
|

## [RFC] Bang constraint

 In reply to this post by Gabor Greif-2 So, what exactly does this constraint mean outside of data declarations? E.g. how do we interpret   f :: (!a) => a -> a -> a ? * Gabor Greif [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