{-# LANGUAGE DeriveDataTypeable, PatternGuards, RecordWildCards, ConstraintKinds #-}-- | Errors seen by the usermoduleDevelopment.Shake.Internal.Errors(ShakeException (..),throwM ,throwImpure ,errorInternal ,errorStructured ,errorNoRuleToBuildType ,errorRuleDefinedMultipleTimes ,errorMultipleRulesMatch ,errorRuleRecursion ,errorComplexRecursion ,errorNoApply ,errorDirectoryNotFile ,errorNoHash )whereimportData.Tuple.ExtraimportControl.Exception.ExtraimportControl.Monad.IO.ClassimportGeneral.Extra importData.TypeableimportData.List.ExtraimportData.MaybethrowM ::MonadIOm =>SomeException->m a throwM :: forall (m :: * -> *) a. MonadIO m => SomeException -> m a
throwM =IO a -> m a
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO a -> m a) -> (SomeException -> IO a) -> SomeException -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.SomeException -> IO a
forall e a. Exception e => e -> IO a
throwIOthrowImpure ::SomeException->a throwImpure :: forall a. SomeException -> a
throwImpure =SomeException -> a
forall a e. Exception e => e -> a
throwerrorInternal ::Partial=>String->SomeExceptionerrorInternal :: Partial => String -> SomeException
errorInternal String
msg =ErrorCall -> SomeException
forall e. Exception e => e -> SomeException
toException(ErrorCall -> SomeException) -> ErrorCall -> SomeException
forall a b. (a -> b) -> a -> b
$String -> ErrorCall
ErrorCall(String -> ErrorCall) -> String -> ErrorCall
forall a b. (a -> b) -> a -> b
$[String] -> String
unlines([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$(String
"Development.Shake: Internal error, please report to Neil Mitchell ("String -> String -> String
forall a. [a] -> [a] -> [a]
++String
msg String -> String -> String
forall a. [a] -> [a] -> [a]
++String
")")String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
Partial => [String]
callStackFull alternatives :: [(String, String)]
alternatives =let* :: a -> b -> (a, b)
(*) =(,)in[String
"_rule_"String -> String -> (String, String)
forall a b. a -> b -> (a, b)
* String
"oracle",String
"_Rule_"String -> String -> (String, String)
forall a b. a -> b -> (a, b)
* String
"Oracle",String
"_key_"String -> String -> (String, String)
forall a b. a -> b -> (a, b)
* String
"question",String
"_Key_"String -> String -> (String, String)
forall a b. a -> b -> (a, b)
* String
"Question",String
"_result_"String -> String -> (String, String)
forall a b. a -> b -> (a, b)
* String
"answer",String
"_Result_"String -> String -> (String, String)
forall a b. a -> b -> (a, b)
* String
"Answer",String
"_addBuiltinRule_"String -> String -> (String, String)
forall a b. a -> b -> (a, b)
* String
"addOracle",String
"_apply_"String -> String -> (String, String)
forall a b. a -> b -> (a, b)
* String
"askOracle"]errorStructured ::String->[(String,MaybeString)]->String->SomeExceptionerrorStructured :: String -> [(String, Maybe String)] -> String -> SomeException
errorStructured String
msg [(String, Maybe String)]
args String
hint =ErrorCall -> SomeException
forall e. Exception e => e -> SomeException
toException(ErrorCall -> SomeException) -> ErrorCall -> SomeException
forall a b. (a -> b) -> a -> b
$String -> ErrorCall
ErrorCall(String -> ErrorCall) -> String -> ErrorCall
forall a b. (a -> b) -> a -> b
$[String] -> String
unlines([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$[String
msg String -> String -> String
forall a. [a] -> [a] -> [a]
++(if[(String, Maybe String)] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null[(String, Maybe String)]
args thenString
"."elseString
":")][String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++[String
" "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
a String -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
':'|String
a String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/=String
""]String -> String -> String
forall a. [a] -> [a] -> [a]
++Int -> Char -> String
forall a. Int -> a -> [a]
replicate(Int
as Int -> Int -> Int
forall a. Num a => a -> a -> a
-String -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
lengthString
a Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2)Char
' 'String -> String -> String
forall a. [a] -> [a] -> [a]
++String
b |(String
a ,String
b )<-[(String, String)]
args2 ][String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++[String
hint |String
hint String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/=String
""]whereas :: Int
as =[Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum([Int] -> Int) -> [Int] -> Int
forall a b. (a -> b) -> a -> b
$Int
0Int -> [Int] -> [Int]
forall a. a -> [a] -> [a]
:((String, String) -> Int) -> [(String, String)] -> [Int]
forall a b. (a -> b) -> [a] -> [b]
map(String -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length(String -> Int)
-> ((String, String) -> String) -> (String, String) -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(String, String) -> String
forall a b. (a, b) -> a
fst)[(String, String)]
args2 args2 :: [(String, String)]
args2 =[(String
a ,String
b )|(String
a ,JustString
b )<-[(String, Maybe String)]
args ]structured ::Bool->String->[(String,MaybeString)]->String->SomeExceptionstructured :: Bool
-> String -> [(String, Maybe String)] -> String -> SomeException
structured Bool
alt String
msg [(String, Maybe String)]
args String
hint =String -> [(String, Maybe String)] -> String -> SomeException
errorStructured (String -> String
f String
msg )(((String, Maybe String) -> (String, Maybe String))
-> [(String, Maybe String)] -> [(String, Maybe String)]
forall a b. (a -> b) -> [a] -> [b]
map((String -> String)
-> (String, Maybe String) -> (String, Maybe String)
forall a a' b. (a -> a') -> (a, b) -> (a', b)
firstString -> String
f )[(String, Maybe String)]
args )(String -> String
f String
hint )wheref :: String -> String
f =(Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter(Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
/=Char
'_')(String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(ifBool
alt thenString -> String
g elseString -> String
forall a. a -> a
id)g :: String -> String
g String
xs |String
res :[String]
_<-[String
to String -> String -> String
forall a. [a] -> [a] -> [a]
++String -> String
g String
rest |(String
from ,String
to )<-[(String, String)]
alternatives ,JustString
rest <-[String -> String -> Maybe String
forall a. Eq a => [a] -> [a] -> Maybe [a]
stripPrefixString
from String
xs ]]=String
res g (Char
x :String
xs )=Char
x Char -> String -> String
forall a. a -> [a] -> [a]
:String -> String
g String
xs g []=[]errorDirectoryNotFile ::FilePath->SomeExceptionerrorDirectoryNotFile :: String -> SomeException
errorDirectoryNotFile String
dir =String -> [(String, Maybe String)] -> String -> SomeException
errorStructured String
"Build system error - expected a file, got a directory"[(String
"Directory",String -> Maybe String
forall a. a -> Maybe a
JustString
dir )]String
"Probably due to calling 'need' on a directory. Shake only permits 'need' on files."errorNoRuleToBuildType ::TypeRep->MaybeString->MaybeTypeRep->SomeExceptionerrorNoRuleToBuildType :: TypeRep -> Maybe String -> Maybe TypeRep -> SomeException
errorNoRuleToBuildType TypeRep
tk Maybe String
k Maybe TypeRep
tv =Bool
-> String -> [(String, Maybe String)] -> String -> SomeException
structured (TypeRep -> Bool
specialIsOracleKey TypeRep
tk )String
"Build system error - no _rule_ matches the _key_ type"[(String
"_Key_ type",String -> Maybe String
forall a. a -> Maybe a
Just(String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$TypeRep -> String
forall a. Show a => a -> String
showTypeRep
tk ),(String
"_Key_ value",Maybe String
k ),(String
"_Result_ type",(TypeRep -> String) -> Maybe TypeRep -> Maybe String
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmapTypeRep -> String
forall a. Show a => a -> String
showMaybe TypeRep
tv )]String
"You are missing a call to _addBuiltinRule_, or your call to _apply_ has the wrong _key_ type"errorRuleDefinedMultipleTimes ::TypeRep->[String]->SomeExceptionerrorRuleDefinedMultipleTimes :: TypeRep -> [String] -> SomeException
errorRuleDefinedMultipleTimes TypeRep
tk [String]
locations =Bool
-> String -> [(String, Maybe String)] -> String -> SomeException
structured (TypeRep -> Bool
specialIsOracleKey TypeRep
tk )String
"Build system error - _rule_ defined twice at one _key_ type"((String
"_Key_ type",String -> Maybe String
forall a. a -> Maybe a
Just(String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$TypeRep -> String
forall a. Show a => a -> String
showTypeRep
tk )(String, Maybe String)
-> [(String, Maybe String)] -> [(String, Maybe String)]
forall a. a -> [a] -> [a]
:[(String
"Location "String -> String -> String
forall a. [a] -> [a] -> [a]
++Integer -> String
forall a. Show a => a -> String
showInteger
i ,String -> Maybe String
forall a. a -> Maybe a
JustString
x )|(Integer
i ,String
x )<-Integer -> [String] -> [(Integer, String)]
forall a b. Enum a => a -> [b] -> [(a, b)]
zipFromInteger
1[String]
locations ])String
"You have called _addBuiltinRule_ more than once on the same key type"errorMultipleRulesMatch ::TypeRep->String->[MaybeString]->SomeExceptionerrorMultipleRulesMatch :: TypeRep -> String -> [Maybe String] -> SomeException
errorMultipleRulesMatch TypeRep
tk String
k [Maybe String]
names =String -> [(String, Maybe String)] -> String -> SomeException
errorStructured (String
"Build system error - key matches "String -> String -> String
forall a. [a] -> [a] -> [a]
++(if[Maybe String] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null[Maybe String]
names thenString
"no"elseString
"multiple")String -> String -> String
forall a. [a] -> [a] -> [a]
++String
" rules")([(String
"Key type",String -> Maybe String
forall a. a -> Maybe a
Just(String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$TypeRep -> String
forall a. Show a => a -> String
showTypeRep
tk ),(String
"Key value",String -> Maybe String
forall a. a -> Maybe a
JustString
k ),(String
"Rules matched",String -> Maybe String
forall a. a -> Maybe a
Just(String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$Int -> String
forall a. Show a => a -> String
show(Int -> String) -> Int -> String
forall a b. (a -> b) -> a -> b
$[Maybe String] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length[Maybe String]
names )][(String, Maybe String)]
-> [(String, Maybe String)] -> [(String, Maybe String)]
forall a. [a] -> [a] -> [a]
++[(String
"Rule "String -> String -> String
forall a. [a] -> [a] -> [a]
++Integer -> String
forall a. Show a => a -> String
showInteger
i ,Maybe String
x )|(Maybe String -> Bool) -> [Maybe String] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
anyMaybe String -> Bool
forall a. Maybe a -> Bool
isJust[Maybe String]
names ,(Integer
i ,Maybe String
x )<-Integer -> [Maybe String] -> [(Integer, Maybe String)]
forall a b. Enum a => a -> [b] -> [(a, b)]
zipFromInteger
1[Maybe String]
names ])(if[Maybe String] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null[Maybe String]
names thenString
"Either add a rule that produces the above key, or stop requiring the above key"elseString
"Modify your rules so only one can produce the above key")errorNoHash ::SomeExceptionerrorNoHash :: SomeException
errorNoHash =String -> [(String, Maybe String)] -> String -> SomeException
errorStructured String
"Cannot use shakeChange=ChangeModTime with shakeShare"[]String
""errorRuleRecursion ::TypeRep->String->SomeException-- may involve both rules and oracle, so report as only ruleserrorRuleRecursion :: TypeRep -> String -> SomeException
errorRuleRecursion TypeRep
tk String
k =String -> [(String, Maybe String)] -> String -> SomeException
errorStructured String
"Build system error - recursion detected"[(String
"Key type",String -> Maybe String
forall a. a -> Maybe a
Just(String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$TypeRep -> String
forall a. Show a => a -> String
showTypeRep
tk ),(String
"Key value",String -> Maybe String
forall a. a -> Maybe a
JustString
k )]String
"Rules may not be recursive"errorComplexRecursion ::[String]->SomeExceptionerrorComplexRecursion :: [String] -> SomeException
errorComplexRecursion [String]
ks =String -> [(String, Maybe String)] -> String -> SomeException
errorStructured String
"Build system error - indirect recursion detected"[(String
"Key value "String -> String -> String
forall a. [a] -> [a] -> [a]
++Integer -> String
forall a. Show a => a -> String
showInteger
i ,String -> Maybe String
forall a. a -> Maybe a
JustString
k )|(Integer
i ,String
k )<-Integer -> [String] -> [(Integer, String)]
forall a b. Enum a => a -> [b] -> [(a, b)]
zipFromInteger
1[String]
ks ]String
"Rules may not be recursive"errorNoApply ::TypeRep->MaybeString->String->SomeExceptionerrorNoApply :: TypeRep -> Maybe String -> String -> SomeException
errorNoApply TypeRep
tk Maybe String
k String
msg =String -> [(String, Maybe String)] -> String -> SomeException
errorStructured String
"Build system error - cannot currently introduce a dependency (e.g. calling 'apply')"[(String
"Reason",String -> Maybe String
forall a. a -> Maybe a
JustString
msg ),(String
"Key type",String -> Maybe String
forall a. a -> Maybe a
Just(String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$TypeRep -> String
forall a. Show a => a -> String
showTypeRep
tk ),(String
"Key value",Maybe String
k )]String
"Move the call earlier/later"-- Should be in Special, but then we get an import cyclespecialIsOracleKey ::TypeRep->BoolspecialIsOracleKey :: TypeRep -> Bool
specialIsOracleKey TypeRep
t =String
con String -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
"OracleQ"wherecon :: String
con =TyCon -> String
forall a. Show a => a -> String
show(TyCon -> String) -> TyCon -> String
forall a b. (a -> b) -> a -> b
$(TyCon, [TypeRep]) -> TyCon
forall a b. (a, b) -> a
fst((TyCon, [TypeRep]) -> TyCon) -> (TyCon, [TypeRep]) -> TyCon
forall a b. (a -> b) -> a -> b
$TypeRep -> (TyCon, [TypeRep])
splitTyConAppTypeRep
t -- | Error representing all expected exceptions thrown by Shake.-- Problems when executing rules will be raising using this exception type.dataShakeException =ShakeException {ShakeException -> String
shakeExceptionTarget ::String-- ^ The target that was being built when the exception occurred.,ShakeException -> [String]
shakeExceptionStack ::[String]-- ^ A description of the call stack, one entry per line.,ShakeException -> SomeException
shakeExceptionInner ::SomeException-- ^ The underlying exception that was raised.}derivingTypeableinstanceExceptionShakeException instanceShowShakeException whereshow :: ShakeException -> String
showShakeException {String
[String]
SomeException
shakeExceptionTarget :: ShakeException -> String
shakeExceptionStack :: ShakeException -> [String]
shakeExceptionInner :: ShakeException -> SomeException
shakeExceptionTarget :: String
shakeExceptionStack :: [String]
shakeExceptionInner :: SomeException
.. }=[String] -> String
unlines([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$String
"Error when running Shake build system:"String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
shakeExceptionStack [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++[SomeException -> String
forall e. Exception e => e -> String
displayExceptionSomeException
shakeExceptionInner ]

AltStyle によって変換されたページ (->オリジナル) /