Bugs, and Feature Requests

Projects seqaid, deepseq-bounded, and leaky.

Urgent
Simmering
Open
Finished
Orphan
IdSubject
20150102-02
20150102-02
Title
Build failures due to missing cpphs.

Resolution
The bug can be fixed by cabal install cpphs for all affected versions of seqaid and leaky.
Versions ≥0.2 should automatically install cpphs properly, but depending on your platform you may need to adjust your path. It should "just work" if you cabal install in the standard way, because the tools are installed to ~/.cabal/bin which is usually in your path. This should also work for auto-build systems, provided they're not misconfigured. (csh users such as myself are unsupported, and may need to issue a rehash command, which is likely to interrupt the build.) If this fails, then your build of any package that depends on build-tools will fail likewise.
 
I've removed all string gaps, and made a few related changes, and the system now works with non-cpphs (seqaid ≥0.2). However, as things stand with cabal-install, you cannot provide for alternatives ("cpphs if available, cpp otherwise"): well ... in principle, if you use a flag, and mark it manual:false, the constraints solver of the builder should try toggling the flag...
 
The reason for the difficulty is that cpphs requires the option --cpp, but this option is rejected by GNU cpp and causes build failure, so nothing less than a .cabal flag will reconcile these two alternatives. But even if cpphs could manage without the --cpp option, it looks like you'd need a flag to include/exclude -pgmPcpphs. I've reopened this ticket, since it makes sense to provide the manual:false flag (USE_CPPHS).
 
I added the USE_CPPHS non-manual flag, and it does indeed auto-toggle (GHC 7.8.4, Cabal 1.22.0.0). Decided to default this flag to False, actually, at least for the time being, since few packages use cpphs and it seems to bring trouble to some, and I'm not relying on any capability of cpphs that cpp doesn't provide. And, cpp gives me the precious -Wundef warnings, which I am not getting (at least not consistently) from cpphs...
20150102-01
Find the time to run hlint for once...
20150101-01
Should make a real test suite (preferably incl. QC/SC and Criterion).
20141223-02
Could work for GHC≥7.6 (instead of GHC≥7.8): get rid of AnnP (which requires TH 2.9).
Use some means other than ANN pragmas to communicate TH → Core plugin.
20141223-01
Title
Tweak the pattern grammar (incompatible API change).

Resolution
This is done, and uses attoparsec, giving much cleaner parser code.
 
There is a temporary flag (NEW_IMPROVED_PATTERN_GRAMMAR) for switching between old and new grammars, but the old grammar is deprecated, and slated for removal in deepseq-bounded 0.7 (this flag will also be removed).
 
At this time, the only way to use HASKELL98_FRAGMENT is to revert to the old grammar, but by 0.6.1.0 there will hopefully be an H98 parser for the new grammar. (In any case, it's always possible to use the PatNode constructors directly.)

Issue
Seriously consider changing the Pattern language, so .{..{#.}.} becomes {.{#.}.}.
There is a page with more information.
 
Note that the pattern in the latest (probably final) version of the grammar reads (!(.!)!) now. This may seem less clean than {.{#.}.} but this is an atypical example; more typical would be {#{.#}#} which looks like (.(!.).) (or .(!.). simply) in the new grammar. That is, to not force a node is more fundamental than to force it, so it earns the lighter . symbol. This was the reason for the change, besides that ! is already strongly associated with "strict" or "seq" (force the head) in the Haskell 98 standard (strict fields, and $!).
20141221-01
Add one or more new PatNode constructors which raise an exception when matched.
One interpretation of hastor's suggestion. The exception can be caught by the seqaid runtime, and logged, merged into stats, etc.
 
This led to a refactoring of PatNode with addition of a PatNodeAttrs parameter to each constructor, and several new capabilities were easily implemented this way.
20141220-02
Sort out lower bounds on deps — respect the PVP.
20141220-01
Sort out upper bounds on deps — respect the PVP.
20141219-02
Use (live) heap entity data (types and scopes) to focus the harness (ghc-heap-view).
This isn't strictly necessary — blanket coverage only costs for the functions actually called (evaluated at arguments), and seqaid will find dominant leakers in hot spots, then set the rest of the harness to transparent (identity). But it just makes sense to exploit heap entity info, since it's avaiilable with --with-rtsopts=-T (and it's pretty inexpensive).
20141219-01
Seqaid.Optim needs work.
Please email me tickets. If there are a lot of contributions besides my own, I'll put up a proper tracker.