diff options
author | RyanGlScott <ryan.gl.scott@gmail.com> | 2015-12-22 11:25:59 +0100 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2015-12-22 13:22:29 +0100 |
commit | f975b0b10b2971d00b6e1986e0a2af2bf759a4f4 (patch) | |
tree | 8b890f6e8058bb0a625a409de70f107101048d8d /libraries/template-haskell/changelog.md | |
parent | b407bd775d9241023b4694b3142a756df0082ea2 (diff) | |
download | haskell-f975b0b10b2971d00b6e1986e0a2af2bf759a4f4.tar.gz |
Rework Template Haskell's handling of strictness
Currently, Template Haskell's treatment of strictness is not enough to
cover all possible combinations of unpackedness and strictness. In
addition, it isn't equipped to deal with new features (such as
`-XStrictData`) which can change a datatype's fields' strictness during
compilation.
To address this, I replaced TH's `Strict` datatype with
`SourceUnpackedness` and `SourceStrictness` (which give the programmer a
more complete toolkit to configure a datatype field's strictness than
just `IsStrict`, `IsLazy`, and `Unpack`). I also added the ability to
reify a constructor fields' strictness post-compilation through the
`reifyConStrictness` function.
Fixes #10697.
Test Plan: ./validate
Reviewers: simonpj, goldfire, bgamari, austin
Reviewed By: goldfire, bgamari
Subscribers: thomie
Differential Revision: https://phabricator.haskell.org/D1603
GHC Trac Issues: #10697
Diffstat (limited to 'libraries/template-haskell/changelog.md')
-rw-r--r-- | libraries/template-haskell/changelog.md | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/libraries/template-haskell/changelog.md b/libraries/template-haskell/changelog.md index 33419b34ec..9564e95678 100644 --- a/libraries/template-haskell/changelog.md +++ b/libraries/template-haskell/changelog.md @@ -25,6 +25,18 @@ * Add `TypeFamilyHead` for common elements of `OpenTypeFamilyD` and `ClosedTypeFamilyD` (#10902) + * The `Strict` datatype was split among different datatypes: three for + writing the strictness information of data constructors' fields as denoted + in Haskell source code (`SourceUnpackedness` and `SourceStrictness`, as + well as `Bang`), and one for strictness information after a constructor is + compiled (`DecidedStrictness`). `Strict`, `StrictType` and `VarStrictType` + have been deprecated in favor of `Bang`, `BangType` and `VarBangType`, and + three functions (`isStrict`, `isLazy`, and `unpack`) were removed because + they no longer serve any use in this new design. (#10697) + + * Add `reifyConStrictness` to query a data constructor's `DecidedStrictness` + values for its fields (#10697) + * TODO: document API changes and important bugfixes |