@@ -99,6 +99,7 @@ import Data.EnumMap.Strict (EnumMap)
99
99
import qualified Data.EnumMap.Strict as EM
100
100
import Data.Foldable (for_ , toList )
101
101
import Data.Functor ((<&>) )
102
+ import Data.Functor.Identity
102
103
import Data.Hashable
103
104
import qualified Data.HashMap.Strict as HMap
104
105
import Data.HashSet (HashSet )
@@ -920,21 +921,21 @@ defineNoDiagnostics recorder op = defineEarlyCutoff recorder $ RuleNoDiagnostics
920
921
-- | Request a Rule result if available
921
922
use :: IdeRule k v
922
923
=> k -> NormalizedFilePath -> Action (Maybe v )
923
- use key file = head <$> uses key [ file]
924
+ use key file = runIdentity <$> uses key ( Identity file)
924
925
925
926
-- | Request a Rule result, it not available return the last computed result, if any, which may be stale
926
927
useWithStale :: IdeRule k v
927
928
=> k -> NormalizedFilePath -> Action (Maybe (v , PositionMapping ))
928
- useWithStale key file = head <$> usesWithStale key [ file]
929
+ useWithStale key file = runIdentity <$> usesWithStale key ( Identity file)
929
930
930
931
-- | Request a Rule result, it not available return the last computed result which may be stale.
931
932
-- Errors out if none available.
932
933
useWithStale_ :: IdeRule k v
933
934
=> k -> NormalizedFilePath -> Action (v , PositionMapping )
934
- useWithStale_ key file = head <$> usesWithStale_ key [ file]
935
+ useWithStale_ key file = runIdentity <$> usesWithStale_ key ( Identity file)
935
936
936
937
-- | 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 ))
938
939
usesWithStale_ key files = do
939
940
res <- usesWithStale key files
940
941
case sequence res of
@@ -999,37 +1000,37 @@ useNoFile :: IdeRule k v => k -> Action (Maybe v)
999
1000
useNoFile key = use key emptyFilePath
1000
1001
1001
1002
use_ :: IdeRule k v => k -> NormalizedFilePath -> Action v
1002
- use_ key file = head <$> uses_ key [ file]
1003
+ use_ key file = runIdentity <$> uses_ key ( Identity file)
1003
1004
1004
1005
useNoFile_ :: IdeRule k v => k -> Action v
1005
1006
useNoFile_ key = use_ key emptyFilePath
1006
1007
1007
- uses_ :: IdeRule k v => k -> [ NormalizedFilePath ] -> Action [ v ]
1008
+ uses_ :: ( Traversable f , IdeRule k v ) => k -> f NormalizedFilePath -> Action ( f v )
1008
1009
uses_ key files = do
1009
1010
res <- uses key files
1010
1011
case sequence res of
1011
1012
Nothing -> liftIO $ throwIO $ BadDependency (show key)
1012
1013
Just v -> return v
1013
1014
1014
1015
-- | 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)
1018
1019
1019
1020
-- | 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 )))
1022
1023
usesWithStale key files = do
1023
- _ <- apply (map (Q . (key,)) files)
1024
+ _ <- apply (fmap (Q . (key,)) files)
1024
1025
-- We don't look at the result of the 'apply' since 'lastValue' will
1025
1026
-- return the most recent successfully computed value regardless of
1026
1027
-- whether the rule succeeded or not.
1027
- mapM (lastValue key) files
1028
+ traverse (lastValue key) files
1028
1029
1029
1030
useWithoutDependency :: IdeRule k v
1030
1031
=> k -> NormalizedFilePath -> Action (Maybe v )
1031
1032
useWithoutDependency key file =
1032
- (\ [ A value] -> currentValue value) <$> applyWithoutDependency [ Q (key, file)]
1033
+ (\ ( Identity ( A value)) -> currentValue value) <$> applyWithoutDependency ( Identity ( Q (key, file)))
1033
1034
1034
1035
data RuleBody k v
1035
1036
= Rule (k -> NormalizedFilePath -> Action (Maybe BS. ByteString , IdeResult v ))
0 commit comments