
3 Apr
2013
3 Apr
'13
6:06 p.m.
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