{-# LANGUAGE ExistentialQuantification #-}
module Development.IDE.Graph.Database(
Shake.ShakeDatabase,
SomeShakeValue(..),
shakeOpenDatabase,
shakeRunDatabaseForKeys,
Shake.shakeProfileDatabase,
) where
import Data.Typeable
import Development.IDE.Graph.Internal.Action
import Development.IDE.Graph.Internal.Options
import Development.IDE.Graph.Internal.Rules
import Development.Shake (ShakeValue)
import Development.Shake.Classes
import qualified Development.Shake.Database as Shake
shakeOpenDatabase :: ShakeOptions -> Rules () -> IO (IO Shake.ShakeDatabase, IO ())
shakeOpenDatabase :: ShakeOptions -> Rules () -> IO (IO ShakeDatabase, IO ())
shakeOpenDatabase ShakeOptions
a Rules ()
b = ShakeOptions -> Rules () -> IO (IO ShakeDatabase, IO ())
Shake.shakeOpenDatabase (ShakeOptions -> ShakeOptions
fromShakeOptions ShakeOptions
a) (Rules () -> Rules ()
forall a. Rules a -> Rules a
fromRules Rules ()
b)
data SomeShakeValue = forall k . ShakeValue k => SomeShakeValue k
instance Eq SomeShakeValue where SomeShakeValue k
a == :: SomeShakeValue -> SomeShakeValue -> Bool
== SomeShakeValue k
b = k -> Maybe k
forall a b. (Typeable a, Typeable b) => a -> Maybe b
cast k
a Maybe k -> Maybe k -> Bool
forall a. Eq a => a -> a -> Bool
== k -> Maybe k
forall a. a -> Maybe a
Just k
b
instance Hashable SomeShakeValue where hashWithSalt :: Int -> SomeShakeValue -> Int
hashWithSalt Int
s (SomeShakeValue k
x) = Int -> k -> Int
forall a. Hashable a => Int -> a -> Int
hashWithSalt Int
s k
x
instance Show SomeShakeValue where show :: SomeShakeValue -> String
show (SomeShakeValue k
x) = k -> String
forall a. Show a => a -> String
show k
x
shakeRunDatabaseForKeys
:: Maybe [SomeShakeValue]
-> Shake.ShakeDatabase
-> [Action a]
-> IO ([a], [IO ()])
shakeRunDatabaseForKeys :: Maybe [SomeShakeValue]
-> ShakeDatabase -> [Action a] -> IO ([a], [IO ()])
shakeRunDatabaseForKeys Maybe [SomeShakeValue]
_keys ShakeDatabase
a [Action a]
b =
ShakeDatabase -> [Action a] -> IO ([a], [IO ()])
forall a. ShakeDatabase -> [Action a] -> IO ([a], [IO ()])
Shake.shakeRunDatabase ShakeDatabase
a ((Action a -> Action a) -> [Action a] -> [Action a]
forall a b. (a -> b) -> [a] -> [b]
map Action a -> Action a
forall a. Action a -> Action a
fromAction [Action a]
b)