[Haskell-cafe] an idea for modifiyng data/newtype syntax: use `::=` instead of `=`
Tom Ellis
tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk
Sat Aug 8 21:38:26 UTC 2015
On Sat, Aug 08, 2015 at 11:32:59PM +0200, MigMit wrote:
> >>>> Well, it's certainly unsupported by evidence. Because third-party code CAN
> >>>> distinguish between those.
> >>>
> >>> OK, show me the code!
> >>
> >> I did. You removed it when quoting.
> >
> > Reinstating:
> >
> >>> Prelude> newtype A = A Int deriving Show
> >>> Prelude> data B = B !Int deriving Show
> >>> Prelude> let x = case x of A n -> A 1 in x
> >>> A 1
> >>> Prelude> let y = case y of B n -> B 1 in y
> >>> *** Exception: <<loop>>
> >
> > This isn't third party code. It knows about the constructors of A and B.
>
> 1) This might be the code written by someone using your library/framework.
> In which case it would know about A and B.
Then it's up to me to define and document whatever strictness properties I
want for my constructors.
To reiterate: I'm *not* suggesting replacing
newtype A = A a
with
data A = A!
in existing code. Of course that won't work. But for *new* datatypes
choosing one rather than the other gives no difference in terms of
denotational semantics.
> 2) It might be generated by the Template Haskell — which is free to use
> whatever constructor is fed into it.
OK, so show me what goes wrong!
More information about the Haskell-Cafe
mailing list