4
4
{-# LANGUAGE TypeFamilies #-}
5
5
module Example where
6
6
7
+ import qualified Control.Concurrent as C
8
+ import Control.Monad.IO.Class (liftIO )
7
9
import Development.IDE.Graph
8
10
import Development.IDE.Graph.Classes
9
11
import Development.IDE.Graph.Rule
@@ -27,3 +29,36 @@ ruleBool :: Rules ()
27
29
ruleBool = addRule $ \ Rule _old _mode -> do
28
30
() <- apply1 Rule
29
31
return $ RunResult ChangedRecomputeDiff " " True
32
+
33
+
34
+ data CondRule = CondRule
35
+ deriving (Eq , Generic , Hashable , NFData , Show , Typeable )
36
+ type instance RuleResult CondRule = Bool
37
+
38
+
39
+ ruleCond :: C. MVar Bool -> Rules ()
40
+ ruleCond mv = addRule $ \ CondRule _old _mode -> do
41
+ r <- liftIO $ C. modifyMVar mv $ \ x -> return (not x, x)
42
+ return $ RunResult ChangedRecomputeDiff " " r
43
+
44
+ data BranchedRule = BranchedRule
45
+ deriving (Eq , Generic , Hashable , NFData , Show , Typeable )
46
+ type instance RuleResult BranchedRule = Int
47
+
48
+ ruleWithCond :: Rules ()
49
+ ruleWithCond = addRule $ \ BranchedRule _old _mode -> do
50
+ r <- apply1 CondRule
51
+ if r then do
52
+ _ <- apply1 SubBranchRule
53
+ return $ RunResult ChangedRecomputeDiff " " (1 :: Int )
54
+ else
55
+ return $ RunResult ChangedRecomputeDiff " " (2 :: Int )
56
+
57
+ data SubBranchRule = SubBranchRule
58
+ deriving (Eq , Generic , Hashable , NFData , Show , Typeable )
59
+ type instance RuleResult SubBranchRule = Int
60
+
61
+ ruleSubBranch :: C. MVar Int -> Rules ()
62
+ ruleSubBranch mv = addRule $ \ SubBranchRule _old _mode -> do
63
+ r <- liftIO $ C. modifyMVar mv $ \ x -> return (x+ 1 , x)
64
+ return $ RunResult ChangedRecomputeDiff " " r
0 commit comments