
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@haskell.org [mailto:ghc-devs-bounces@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@haskell.org | http://www.haskell.org/mailman/listinfo/ghc-devs