[Haskell-cafe] an idea for modifiyng data/newtype syntax: use `::=` instead of `=`

Tom Ellis tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk
Sun Aug 9 10:37:29 UTC 2015


On Sun, Aug 09, 2015 at 12:15:47PM +0200, MigMit wrote:
> > Right, you can distinguish data declarations from newtype declarations this
> > way, but by using Template Haskell you can also distinguish
> > 
> >    * data A = A Int
> >    * data A = A { a :: Int }
> >    * data A = A' Int
> >    * data A = A Int !(), and
> >    * newtype B = B A (where A has one of the above definitions)
> 
> Sure, because they are different.
> 
> > from each other.  My claim is that
> > 
> >    * data B = B !A
> > 
> > is as indistinguishable from the above four as they are from each other.
> 
> Can you please NOT say that some thing can be distinguished AND that they
> are indistinguishable in the same post?

I think we are perhaps talking at cross purposes.

To clarify, here is an explicit statement (somewhat weaker than the full
generality of my claim):

    `data D = D !T` and `newtype N = N T` are isomorphic in the sense that
    there exist `f :: D -> N` and `g :: N -> D` such that `f . g = id` and
    `g . f = id`.

Do you agree or disagree with this statement?  Then we may proceed.

Tom


More information about the Haskell-Cafe mailing list