Dependencies for deepseq-bounded-0.7.0.2

library
  • array (>=0.5 && <0.6)
  • base (>=4 && <5)
  • deepseq (>=1.3 && <1.5)
  • mtl (>=2.1 && <2.2)
  • random (==1.1)
  • if flag(use_cpphs)
  • if !flag(haskell98_fragment)
  • if flag(use_ww_deepseq)
  • if !flag(haskell98_fragment)
  • if !flag(haskell98_fragment)
    • if flag(use_par_seqable)
  • if !flag(haskell98_fragment)
    • if flag(use_par_patnode)
  • if !flag(haskell98_fragment)
    • if flag(use_pseq_patnode)

Flags

Manual Flags

NameDescriptionDefault
hello_hackage_visitor
Note to those reading on Hackage:
Please ignore these flags, which would be better presented in a collapsed state. The flags are mostly for development purposes.
Disabled
haskell98_fragment

Sacrifice generic deriving, the NFDataPDyn module, and a couple functions from the PatUtil module, in exchange for true Haskell98 conformance (portability). (One non-H98 thing it insists on is PatternGuards, although this could be relieved in the obvious way, at the expense of code clarity.)

Disabled
use_par_patnode

On match, spark recursive submatching for parallel evaluation.

Enabled
use_pseq_patnode

Use Control.Parallel.pseq to order the evaluation of recursive submatching. This is done by providing a permutation argument; refer to the Control.DeepSeq.Bounded.Pattern.PatNode API for additional documentation. Configurable per PatNode.

Enabled
use_trace_patnode

Log a traceline to stderr en passant. Configurable per PatNode. Fires when node is pattern-matched, whether or not the match succeeds.

Enabled
use_ping_patnode

Raise an asynchronous exception en passant. This can be useful for gauging term shape relative to pattern shape, dynamically. Configurable per PatNode. Fires when node is pattern-matched, whether or not the match succeeds.

Enabled
use_die_patnode

Kill (just this) thread immediately. To kill the whole program from a pattern node match, use USE_PING_PATNODE, catch the exception in the main thread, and respond from there as you see fit. Configurable per PatNode. Fires when node is pattern-matched, whether or not the match succeeds.

Enabled
use_timing_patnode

Get as precise a measurement of the time of matching as possible, and optionally (depending on how you use the API) measuring and reporting (storing?) differential timestamps (relative to parent node already matched). Not sure how useable this will be (the timestamps need to be very high resolution and cheap enough to obtain), but the principle has its place here, and the flag makes it possible to exclude all this code in case it's not working out. Configurable per PatNode. Fires when node is pattern-matched, whether or not the match succeeds.

Enabled
use_par_seqable

This flag (now) only affects Seqable. (Refer to USE_PAR_PATNODE for a comparable flag affecting NFDataP.) USE_PAR_SEQABLE = True depends on parallel, and permits (dynamically configurable) sparking of Sequable recursive demand propagation.

Enabled
just_alias_gseqable

The SOP generic function is probably more performant, anyway! (This will be forced False if HASKELL98_FRAGMENT is True.)

Enabled
just_alias_gnfdatan

The SOP generic function is probably more performant, anyway! (This will be forced False if HASKELL98_FRAGMENT is True.)

Disabled
just_alias_gnfdatap

The SOP generic function is probably more performant, anyway! (This will be forced False if HASKELL98_FRAGMENT is True.)

Disabled
provide_data_family

Provide a data family comprising instances corresponding to the Seqable, NFDataN and NFDataP modules. (This will be forced False if HASKELL98_FRAGMENT is True.)

Enabled
use_curly_brace_instead_of_paren_for_subpatterns

Choose grouping convention (concrete syntax) for pattern strings in the DSL. When True, you have "XX.*Y..Y" instead of the (new) default "((.*)..)". Where X=opening curly brace, and Y=closing curly brace - it seems Cabal makes it impossible to present a curly brace in a flag description, even escaped? Unless Unicode entities? { u007D } Nope.

Disabled
abbrev_wn_and_tn_concrete_syntax_to_number_alone__safe_only_to_depth_19

So you can write "2(!53)" instead of "*2(!*5*3)". This will be unambiguous up to a depth of 19. (It may still be unambiguous for higher depths, depending on the use case.) This could be convenient if you work a lot manually with the pattern DSL, particularly for vertical alignment of pattern structures, but otherwise it should be False as ambigities can develop, for instance under (showPat . shrinkPat . compilePat) iteration.

Disabled
abbrev_wn_and_tn_concrete_syntax_to_single_digit__can_only_express_down_to_depth_9

Similar to the preceding, but use "1" instead of "!" for depth-1, and moreover, use "0" instead of "." for depth-0. (This is such a niche-case syntax variant, that may as well go all the way!) It makes for very tidy when you're not using a lot of other attributes. This grammar variant is unambiguous; the danger here is only that conventions get mixed in practise...

Disabled
use_ww_deepseq

Depend on deepseq and deepseq-generics, to provide conditional deep forcing. This is optional.

Enabled
warn_pattern_match_failure

For NFDataP, if a pattern match fails a warning is output to stderr.

Disabled
use_sop

Use the generics-sop package instead of GHC.Generics (in GNFDataN) and instead of SYB (in NFDataPDyn). If USE_SOP is False, then NFDataPDyn, GNFDataP, and GSeqable modules will not be available.

Enabled
nfdata_instance_pattern

A flag to assist debugging, affecting a few modules.

Enabled
use_cpphs

Non-manual flag to allow the build system to try cpphs first, and if that fails, then to try system-wide cpp (typically GNU). I've actually toggled the default, so the build system will try for a system-wide cpp first, and failing that, will try to use cpphs, installing it if necessary. I prefer cpp. I am not getting my most invaluable -Wundef option with cpphs using -optP-Wundef -optP--cpp in my ghc-options. Does cpphs implement it? Not sure...

Enabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info