hls-graph-2.4.0.0: Haskell Language Server internal graph API

Safe Haskell | Safe-Inferred
Language | Haskell2010

Development.IDE.Graph

Contents

- Configuration
- Explicit parallelism
- Oracle rules
- Special rules
- Batching
- Actions for inspecting the keys in the database

Synopsis

- shakeOptions :: ShakeOptions
- data Rules a
- data Action a
- action :: Action a -> Rules ()
- newtype Key where
  - UnsafeMkKey Int
  - pattern Key :: () => (Typeable a, Hashable a, Show a) => a -> Key
- newKey :: (Eq a, Typeable a, Hashable a, Show a) => a -> Key
- renderKey :: Key -> Text
- actionFinally :: Action a -> IO b -> Action a
- actionBracket :: IO a -> (a -> IO b) -> (a -> Action c) -> Action c
- actionCatch :: Exception e => Action a -> (e -> Action a) -> Action a
- actionFork :: Action a -> (Async a -> Action b) -> Action b
- data ShakeOptions
- getShakeExtra :: Typeable a => Action (Maybe a)
- getShakeExtraRules :: Typeable a => Rules (Maybe a)
- newShakeExtra :: Typeable a => a -> Maybe Dynamic
- parallel :: [Action a] -> Action [a]
- type ShakeValue a = (Show a, Typeable a, Eq a, Hashable a, NFData a)
- type family RuleResult key
- alwaysRerun :: Action ()
- reschedule :: Double -> Action ()
- getDirtySet :: Action [(Key, Int)]
- getKeysAndVisitedAge :: Action [(Key, Int)]
- module Development.IDE.Graph.KeyMap
- module Development.IDE.Graph.KeySet

# Documentation

shakeOptions :: ShakeOptions #

data Rules a #

A computation that defines all the rules that form part of the computation graph.

`Rules` has access to `IO` through `MonadIO`. Use of `IO` is at your own risk: if you write `Rules` that throw exceptions, then you need to make sure to handle them yourself when you run the resulting `Rules`.

#### Instances

Instances details

MonadIO Rules # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods liftIO :: IO a -> Rules a #
Applicative Rules # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods pure :: a -> Rules a # (<*>) :: Rules (a -> b) -> Rules a -> Rules b liftA2 :: (a -> b -> c) -> Rules a -> Rules b -> Rules c (*>) :: Rules a -> Rules b -> Rules b (<*) :: Rules a -> Rules b -> Rules a
Functor Rules # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods fmap :: (a -> b) -> Rules a -> Rules b # (<$) :: a -> Rules b -> Rules a #
Monad Rules # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods (>>=) :: Rules a -> (a -> Rules b) -> Rules b (>>) :: Rules a -> Rules b -> Rules b return :: a -> Rules a #
Monoid a => Monoid (Rules a) # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods mempty :: Rules a mappend :: Rules a -> Rules a -> Rules a mconcat :: [Rules a] -> Rules a
Semigroup a => Semigroup (Rules a) # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods (<>) :: Rules a -> Rules a -> Rules a sconcat :: NonEmpty (Rules a) -> Rules a stimes :: Integral b => b -> Rules a -> Rules a

data Action a #

An action representing something that can be run as part of a `Rule`.

`Action`s can be pure functions but also have access to `IO` via `MonadIO` and 'MonadUnliftIO. It should be assumed that actions throw exceptions, these can be caught with `actionCatch`. In particular, it is permissible to use the `MonadFail` instance, which will lead to an `IOException`.

#### Instances

Instances details

MonadFail Action # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods fail :: String -> Action a
MonadIO Action # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods liftIO :: IO a -> Action a #
Applicative Action # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods pure :: a -> Action a # (<*>) :: Action (a -> b) -> Action a -> Action b liftA2 :: (a -> b -> c) -> Action a -> Action b -> Action c (*>) :: Action a -> Action b -> Action b (<*) :: Action a -> Action b -> Action a
Functor Action # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods fmap :: (a -> b) -> Action a -> Action b # (<$) :: a -> Action b -> Action a #
Monad Action # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods (>>=) :: Action a -> (a -> Action b) -> Action b (>>) :: Action a -> Action b -> Action b return :: a -> Action a #
MonadCatch Action # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods catch :: (HasCallStack, Exception e) => Action a -> (e -> Action a) -> Action a
MonadMask Action # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods mask :: HasCallStack => ((forall a. Action a -> Action a) -> Action b) -> Action b # uninterruptibleMask :: HasCallStack => ((forall a. Action a -> Action a) -> Action b) -> Action b # generalBracket :: HasCallStack => Action a -> (a -> ExitCase b -> Action c) -> (a -> Action b) -> Action (b, c) #
MonadThrow Action # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods throwM :: (HasCallStack, Exception e) => e -> Action a
MonadUnliftIO Action # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods withRunInIO :: ((forall a. Action a -> IO a) -> IO b) -> Action b #

action :: Action a -> Rules () #

newtype Key #

Constructors

UnsafeMkKey Int |

Bundled Patterns

pattern Key :: () => (Typeable a, Hashable a, Show a) => a -> Key |

#### Instances

Instances details

Show Key # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods showsPrec :: Int -> Key -> ShowS # show :: Key -> String # showList :: [Key] -> ShowS #
Eq Key # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods (==) :: Key -> Key -> Bool # (/=) :: Key -> Key -> Bool #
Hashable Key # |
Instance details Defined in Development.IDE.Graph.Internal.Types Methods hashWithSalt :: Int -> Key -> Int # hash :: Key -> Int #

newKey :: (Eq a, Typeable a, Hashable a, Show a) => a -> Key #

renderKey :: Key -> Text #

actionFinally :: Action a -> IO b -> Action a #

actionBracket :: IO a -> (a -> IO b) -> (a -> Action c) -> Action c #

actionCatch :: Exception e => Action a -> (e -> Action a) -> Action a #

actionFork :: Action a -> (Async a -> Action b) -> Action b #

# Configuration

data ShakeOptions #

getShakeExtra :: Typeable a => Action (Maybe a) #

getShakeExtraRules :: Typeable a => Rules (Maybe a) #

newShakeExtra :: Typeable a => a -> Maybe Dynamic #

# Explicit parallelism

parallel :: [Action a] -> Action [a] #

# Oracle rules

type ShakeValue a = (Show a, Typeable a, Eq a, Hashable a, NFData a) #

type family RuleResult key #

The type mapping between the `key` or a rule and the resulting `value`.

# Special rules

alwaysRerun :: Action () #

Always rerun this rule when dirty, regardless of the dependencies.

# Batching

reschedule :: Double -> Action () #

# Actions for inspecting the keys in the database

getDirtySet :: Action [(Key, Int)] #

Returns the set of dirty keys annotated with their age (in # of builds)

getKeysAndVisitedAge :: Action [(Key, Int)] #

module Development.IDE.Graph.KeyMap

module Development.IDE.Graph.KeySet