@@ -774,6 +774,16 @@ logLevel :: Idris Int
774774logLevel = do i <- getIState
775775 return (opt_logLevel (idris_options i))
776776
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' }
782+
783+getAutoImpls :: Idris Bool
784+getAutoImpls = do i <- getIState
785+ return (opt_autoimpls (idris_options i))
786+
777787setErrContext :: Bool -> Idris ()
778788setErrContext t = do i <- getIState
779789 let opts = idris_options i
@@ -1431,7 +1441,11 @@ addUsingConstraints syn fc t
14311441addUsingImpls :: SyntaxInfo -> Name -> FC -> PTerm -> Idris PTerm
14321442addUsingImpls syn n fc t
14331443 = do ist <- getIState
1434− let ns = implicitNamesIn (map iname uimpls) ist t
1444+ autoimpl <- getAutoImpls
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
1448+
14351449 let badnames = filter (\n -> not (implicitable n) &&
14361450 n `notElem` (map iname uimpls)) ns
14371451 when (not (null badnames)) $
@@ -1517,15 +1531,19 @@ implicit info syn n ptm = implicit' info syn [] n ptm
15171531implicit' :: ElabInfo -> SyntaxInfo -> [Name] -> Name -> PTerm -> Idris PTerm
15181532implicit' info syn ignore n ptm
15191533 = do i <- getIState
1520− let (tm', impdata) = implicitise syn ignore i ptm
1521− defaultArgCheck (eInfoNames info ++ M.keys (idris_implicits i)) impdata
1522−-- let (tm'', spos) = findStatics i tm'
1523− putIState $ i { idris_implicits = addDef n impdata (idris_implicits i) }
1524− addIBC (IBCImp n)
1525− logLvl 5 ("Implicit " ++ show n ++ " " ++ show impdata)
1526−-- i <- get
1527−-- putIState $ i { idris_statics = addDef n spos (idris_statics i) }
1528− return tm'
1534+ auto <- getAutoImpls
1535+ if not auto
1536+ then return ptm
1537+ else do
1538+ let (tm', impdata) = implicitise syn ignore i ptm
1539+ defaultArgCheck (eInfoNames info ++ M.keys (idris_implicits i)) impdata
1540+ -- let (tm'', spos) = findStatics i tm'
1541+ putIState $ i { idris_implicits = addDef n impdata (idris_implicits i) }
1542+ addIBC (IBCImp n)
1543+ logLvl 5 ("Implicit " ++ show n ++ " " ++ show impdata)
1544+ -- i <- get
1545+ -- putIState $ i { idris_statics = addDef n spos (idris_statics i) }
1546+ return tm'
15291547 where
15301548 -- Detect unknown names in default arguments and throw error if found.
15311549 defaultArgCheck :: [Name] -> [PArg] -> Idris ()