[RFC] Bang constraint

Simon Peyton-Jones simonpj at microsoft.com
Fri Apr 5 09:19:04 CEST 2013


I don't think so.  It's very magic in many ways; more than invoking methods.  Eg when pattern matching we know that the thing is evaluated, and so don't need to re-seq it when re-building a similar constructor.  And it's not clear what would be gained.

A long time ago, seq had this type
	class Eval a where
	  seq :: a -> b -> b
which was a very good, principled thing to do.  One of Haskell's few compromises with reality was to make seq polymorphic.

Simon

| -----Original Message-----
| From: ghc-devs-bounces at haskell.org [mailto:ghc-devs-bounces at haskell.org]
| On Behalf Of Gabor Greif
| Sent: 03 April 2013 19:06
| To: ghc-devs
| Subject: [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
| 
| _______________________________________________
| 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