@@ -99,6 +99,7 @@ import Data.EnumMap.Strict (EnumMap)
9999import qualified Data.EnumMap.Strict as EM
100100import Data.Foldable (for_ , toList )
101101import Data.Functor ((<&>) )
102+ import Data.Functor.Identity
102103import Data.Hashable
103104import qualified Data.HashMap.Strict as HMap
104105import Data.HashSet (HashSet )
@@ -920,21 +921,21 @@ defineNoDiagnostics recorder op = defineEarlyCutoff recorder $ RuleNoDiagnostics
920921-- | Request a Rule result if available
921922use :: IdeRule k v
922923 => k -> NormalizedFilePath -> Action (Maybe v )
923- use key file = head <$> uses key [ file]
924+ use key file = runIdentity <$> uses key ( Identity file)
924925
925926-- | Request a Rule result, it not available return the last computed result, if any, which may be stale
926927useWithStale :: IdeRule k v
927928 => k -> NormalizedFilePath -> Action (Maybe (v , PositionMapping ))
928- useWithStale key file = head <$> usesWithStale key [ file]
929+ useWithStale key file = runIdentity <$> usesWithStale key ( Identity file)
929930
930931-- | Request a Rule result, it not available return the last computed result which may be stale.
931932-- Errors out if none available.
932933useWithStale_ :: IdeRule k v
933934 => k -> NormalizedFilePath -> Action (v , PositionMapping )
934- useWithStale_ key file = head <$> usesWithStale_ key [ file]
935+ useWithStale_ key file = runIdentity <$> usesWithStale_ key ( Identity file)
935936
936937-- | Plural version of 'useWithStale_'
937- usesWithStale_ :: IdeRule k v => k -> [ NormalizedFilePath ] -> Action [( v , PositionMapping )]
938+ usesWithStale_ :: ( Traversable f , IdeRule k v ) => k -> f NormalizedFilePath -> Action ( f ( v , PositionMapping ))
938939usesWithStale_ key files = do
939940 res <- usesWithStale key files
940941 case sequence res of
@@ -999,37 +1000,37 @@ useNoFile :: IdeRule k v => k -> Action (Maybe v)
9991000useNoFile key = use key emptyFilePath
10001001
10011002use_ :: IdeRule k v => k -> NormalizedFilePath -> Action v
1002- use_ key file = head <$> uses_ key [ file]
1003+ use_ key file = runIdentity <$> uses_ key ( Identity file)
10031004
10041005useNoFile_ :: IdeRule k v => k -> Action v
10051006useNoFile_ key = use_ key emptyFilePath
10061007
1007- uses_ :: IdeRule k v => k -> [ NormalizedFilePath ] -> Action [ v ]
1008+ uses_ :: ( Traversable f , IdeRule k v ) => k -> f NormalizedFilePath -> Action ( f v )
10081009uses_ key files = do
10091010 res <- uses key files
10101011 case sequence res of
10111012 Nothing -> liftIO $ throwIO $ BadDependency (show key)
10121013 Just v -> return v
10131014
10141015-- | Plural version of 'use'
1015- uses :: IdeRule k v
1016- => k -> [ NormalizedFilePath ] -> Action [ Maybe v ]
1017- uses key files = map (\ (A value) -> currentValue value) <$> apply (map (Q . (key,)) files)
1016+ uses :: ( Traversable f , IdeRule k v )
1017+ => k -> f NormalizedFilePath -> Action ( f ( Maybe v ))
1018+ uses key files = fmap (\ (A value) -> currentValue value) <$> apply (fmap (Q . (key,)) files)
10181019
10191020-- | Return the last computed result which might be stale.
1020- usesWithStale :: IdeRule k v
1021- => k -> [ NormalizedFilePath ] -> Action [ Maybe (v , PositionMapping )]
1021+ usesWithStale :: ( Traversable f , IdeRule k v )
1022+ => k -> f NormalizedFilePath -> Action ( f ( Maybe (v , PositionMapping )))
10221023usesWithStale key files = do
1023- _ <- apply (map (Q . (key,)) files)
1024+ _ <- apply (fmap (Q . (key,)) files)
10241025 -- We don't look at the result of the 'apply' since 'lastValue' will
10251026 -- return the most recent successfully computed value regardless of
10261027 -- whether the rule succeeded or not.
1027- mapM (lastValue key) files
1028+ traverse (lastValue key) files
10281029
10291030useWithoutDependency :: IdeRule k v
10301031 => k -> NormalizedFilePath -> Action (Maybe v )
10311032useWithoutDependency key file =
1032- (\ [ A value] -> currentValue value) <$> applyWithoutDependency [ Q (key, file)]
1033+ (\ ( Identity ( A value)) -> currentValue value) <$> applyWithoutDependency ( Identity ( Q (key, file)))
10331034
10341035data RuleBody k v
10351036 = Rule (k -> NormalizedFilePath -> Action (Maybe BS. ByteString , IdeResult v ))
0 commit comments