@@ -774,6 +774,16 @@ logLevel :: Idris Int
774logLevel = do i <- getIState
774logLevel = do i <- getIState
775 return (opt_logLevel (idris_options i))
775 return (opt_logLevel (idris_options i))
777+setAutoImpls :: Bool -> Idris ()
778+setAutoImpls b = do i <- getIState
779+ let opts = idris_options i
780+ let opt' = opts { opt_autoimpls = b }
781+ putIState $ i { idris_options = opt' }
783+getAutoImpls :: Idris Bool
784+getAutoImpls = do i <- getIState
785+ return (opt_autoimpls (idris_options i))
777setErrContext :: Bool -> Idris ()
787setErrContext :: Bool -> Idris ()
778setErrContext t = do i <- getIState
788setErrContext t = do i <- getIState
779 let opts = idris_options i
789 let opts = idris_options i
@@ -1431,7 +1441,11 @@ addUsingConstraints syn fc t
1431addUsingImpls :: SyntaxInfo -> Name -> FC -> PTerm -> Idris PTerm
1441addUsingImpls :: SyntaxInfo -> Name -> FC -> PTerm -> Idris PTerm
1432addUsingImpls syn n fc t
1442addUsingImpls syn n fc t
1433 = do ist <- getIState
1443 = do ist <- getIState
1444+ autoimpl <- getAutoImpls
1434− let ns = implicitNamesIn (map iname uimpls) ist t
1445+ let ns_in = implicitNamesIn (map iname uimpls) ist t
1446+ let ns = if autoimpl then ns_in
1447+ else filter (\n -> n `elem` (map iname uimpls)) ns_in
1435 let badnames = filter (\n -> not (implicitable n) &&
1449 let badnames = filter (\n -> not (implicitable n) &&
1436 n `notElem` (map iname uimpls)) ns
1450 n `notElem` (map iname uimpls)) ns
1437 when (not (null badnames)) $
1451 when (not (null badnames)) $
@@ -1517,15 +1531,19 @@ implicit info syn n ptm = implicit' info syn [] n ptm
1517implicit' :: ElabInfo -> SyntaxInfo -> [Name] -> Name -> PTerm -> Idris PTerm
1531implicit' :: ElabInfo -> SyntaxInfo -> [Name] -> Name -> PTerm -> Idris PTerm
1518implicit' info syn ignore n ptm
1532implicit' info syn ignore n ptm
1519 = do i <- getIState
1533 = do i <- getIState
1534+ auto <- getAutoImpls
1520− let (tm', impdata) = implicitise syn ignore i ptm
1538+ let (tm', impdata) = implicitise syn ignore i ptm
1521− defaultArgCheck (eInfoNames info ++ M.keys (idris_implicits i)) impdata
1539+ defaultArgCheck (eInfoNames info ++ M.keys (idris_implicits i)) impdata
1522−-- let (tm'', spos) = findStatics i tm'
1540+ -- let (tm'', spos) = findStatics i tm'
1523− putIState $ i { idris_implicits = addDef n impdata (idris_implicits i) }
1541+ putIState $ i { idris_implicits = addDef n impdata (idris_implicits i) }
1524− addIBC (IBCImp n)
1542+ addIBC (IBCImp n)
1525− logLvl 5 ("Implicit " ++ show n ++ " " ++ show impdata)
1543+ logLvl 5 ("Implicit " ++ show n ++ " " ++ show impdata)
1526−-- i <- get
1544+ -- i <- get
1527−-- putIState $ i { idris_statics = addDef n spos (idris_statics i) }
1545+ -- putIState $ i { idris_statics = addDef n spos (idris_statics i) }
1528− return tm'
1546+ return tm'
1530 -- Detect unknown names in default arguments and throw error if found.
1548 -- Detect unknown names in default arguments and throw error if found.
1531 defaultArgCheck :: [Name] -> [PArg] -> Idris ()
1549 defaultArgCheck :: [Name] -> [PArg] -> Idris ()