-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Dynamic strictness control, including space leak repair -- -- Seqaid is a GHC plugin for non-invasive auto-instrumentation of -- dynamic strictness (and parallelism) control, shortly to include -- optimisation for automated space leak relief using minimal -- strictification. [The optimiser is still in development however.] -- -- Refer to the seqaid homepage for more information. -- -- Please share your comments on this reddit discussion. @package seqaid @version 0.2.0.0 -- | Collects IORefs used by the seqaid runtime. -- -- This will be substantially reorganised and clarified soon. module Seqaid.Global depth_ioref :: IORef Int pattern_ioref :: IORef Pattern snk_ioref :: IORef SeqNode stats_query_idx_ioref :: IORef Int counter_ioref :: IORef Int64 next_sample_at_ioref :: IORef Int64 bytes_allocated_ioref :: IORef Int64 bytes_allocated_prev_ioref :: IORef Int64 current_bytes_used_ioref :: IORef Int64 update_bytes_allocated_ioref :: IO Int64 update_current_bytes_used_ioref :: IO Int64 type SiteID = (Int, String, Int) sample_period :: Int64 max_depth :: Int fixed_pat :: Pattern fixed_pat_sequence :: [Pattern] -- | Harness morphological code. -- -- The optimiser is just barely begun, but implementing it is -- straight-forward Haskell programming, as contrasted with most of the -- supporting infrastructure. module Seqaid.Optim run_IO_SM :: (NFData a, NFDataN a, Typeable a, NFDataP a) => SiteID -> a -> IO (Int, Int, Pattern, SeqNode, Int64, Int64, Int64, Int64, Int64) optimIO :: IO () optim :: () optim_N_phase :: () optim_P_phase :: () -- | This module is for seqaid internal use. module Seqaid.Runtime type SiteID = (Int, String, Int) seqaidDispatch :: (NFData a, NFDataN a, Typeable a, NFDataP a) => SiteID -> a -> a seqaidDispatchDyn :: (NFData a, NFDataN a, Typeable a, NFDataP a) => SiteID -> a -> a -- | There are a few user-level annotations here, but mostly -- seqaid is a non-invasive tool, so it uses a separate -- seqaid.config file instead. -- -- See Seqaid.Config for details about the seqaid.config -- file. module Seqaid.Ann -- | With blanket top-level bind harnessing, this is a means to exclude -- select binds from harness. The String argument need not (but -- may) be fully qualified. data SeqaidAnnExclude SeqaidAnnExclude :: String -> SeqaidAnnExclude -- | This was used for technical reasons, and is hopefully going to be -- deprecated very soon. At present, when you use seqaid (not a -- real function, so no link) to manually wrap an expression for -- harnessing, you must also give a SeqaidAnnManual annotation -- naming the bind you're editing. data SeqaidAnnManual SeqaidAnnManual :: String -> SeqaidAnnManual data SeqaidAnnIncludeList SeqaidAnnIncludeList :: [String] -> SeqaidAnnIncludeList data SeqaidAnnTypes SeqaidAnnTypes :: [String] -> SeqaidAnnTypes data SeqaidAnnAvailableInstances SeqaidAnnAvailableInstances :: [String] -> SeqaidAnnAvailableInstances data SeqaidAnnBindsIncluded SeqaidAnnBindsIncluded :: [String] -> SeqaidAnnBindsIncluded instance Typeable SeqaidAnnExclude instance Typeable SeqaidAnnManual instance Typeable SeqaidAnnIncludeList instance Typeable SeqaidAnnTypes instance Typeable SeqaidAnnAvailableInstances instance Typeable SeqaidAnnBindsIncluded instance Data SeqaidAnnExclude instance Show SeqaidAnnExclude instance Data SeqaidAnnManual instance Show SeqaidAnnManual instance Data SeqaidAnnIncludeList instance Show SeqaidAnnIncludeList instance Data SeqaidAnnTypes instance Show SeqaidAnnTypes instance Data SeqaidAnnAvailableInstances instance Show SeqaidAnnAvailableInstances instance Data SeqaidAnnBindsIncluded instance Show SeqaidAnnBindsIncluded -- | Template Haskell parts of seqaid. -- -- None of these splices needs to (or should) be called by the user. module Seqaid.TH seqaidTH :: [Q Type] -> Q [Dec] seqaidValidate :: [Name] -> Q [Dec] strInstancesTH :: Q [Dec] bindsIncludedTH :: [String] -> Q [Dec] -- | Details concerning the seqaid.config file. -- -- The purpose of the seqaid.config file is to control the -- extent of coverage of the automatically injected instrumentation -- harness. -- -- At this early stage, additional Cabal flags and even some per-module -- CPP switches are used to further vary the behaviour of seqaid. These -- alternatives will become documented as they find a reflection in the -- seqaid.config. Also, see Seqaid.Ann for a few user -- annotations, which will also be deprecated soon... -- -- The format of seqaid.config is a seqence of lines, which can -- be one of three kinds: -- -- -- -- Configuration lines begin with a keyword, and are followed by one or -- more arguments. Arguments are comma-separated. Layout is used when -- keywords generate nested structure. -- -- For instance, here is the seqaid.config file from the -- leaky package: -- --
--   package    leaky
--   module     Main
--     binds    duty
--       types  Types.TA
--   instances  Types.TA, Types.TB, Types.TC
--   
-- -- (The extra whitespace after the keywords is purely cosmetic.) -- -- More documentation is pending, but for additional explanations about -- this particular example, please refer to this document. module Seqaid.Config -- | Instrument a program with dynamic forcing functions. -- -- This module is for internal use with the seqaid GHC plugin. -- -- Refer to deepseq-bounded for more information about this -- methodology. module Seqaid.Core seqinjectProgram :: [String] -> ModGuts -> CoreM ModGuts -- | Standard GHC Core plugin stub. -- -- Use GHC option -fplugin=Seqaid.Plugin to activate. (Other options, as -- well as a configuration file, are also required. Refer to the included -- HTML documentation for more information; or online at the seqaid -- homepage.) module Seqaid.Plugin plugin :: Plugin