@@ -813,19 +813,20 @@ StringList ::=
813813
814814Directive ::= '%' Directive';
815815
816−Directive' ::= 'lib' CodeGen String_t
817− | 'link' CodeGen String_t
818− | 'flag' CodeGen String_t
819− | 'include' CodeGen String_t
820− | 'hide' Name
821− | 'freeze' Name
822− | 'access' Accessibility
823− | 'default' Totality
824− | 'logging' Natural
825− | 'dynamic' StringList
826− | 'name' Name NameList
827− | 'language' 'TypeProviders'
828− | 'language' 'ErrorReflection'
816+Directive' ::= 'lib' CodeGen String_t
817+ | 'link' CodeGen String_t
818+ | 'flag' CodeGen String_t
819+ | 'include' CodeGen String_t
820+ | 'hide' Name
821+ | 'freeze' Name
822+ | 'access' Accessibility
823+ | 'default' Totality
824+ | 'logging' Natural
825+ | 'dynamic' StringList
826+ | 'name' Name NameList
827+ | 'error_handlers' Name NameList
828+ | 'language' 'TypeProviders'
829+ | 'language' 'ErrorReflection'
829830 ;
830831-}
831832directive :: SyntaxInfo -> IdrisParser [PDecl]
@@ -870,16 +871,23 @@ directive syn = do try (lchar '%' *> reserved "lib"); cgn <- codegen_; lib <- st
870871 ty <- iName []
871872 ns <- sepBy1 name (lchar ',')
872873 return [PDirective
873− (do i <- getIState
874− ty' <- case lookupCtxtName ty (idris_implicits i) of
875− [(tyn, _)] -> return tyn
876− [] -> throwError (NoSuchVariable ty)
877− tyns -> throwError (CantResolveAlts (map show (map fst tyns)))
874+ (do ty' <- disambiguate ty
878875 mapM_ (addNameHint ty') ns
879− mapM_ (\n -> addIBC (IBCNameHint (ty', n))) ns)]
876+ mapM_ (\n -> addIBC (IBCNameHint (ty', n))) ns)]
877+ <|> do try (lchar '%' *> reserved "error_handlers")
878+ fn <- iName []
879+ ns <- sepBy1 name (lchar ',')
880+ return [PDirective $ do n' <- disambiguate fn
881+ addFunctionErrorHandlers fn ns]
880882 <|> do try (lchar '%' *> reserved "language"); ext <- pLangExt;
881883 return [PDirective (addLangExt ext)]
882884 <?> "directive"
885+ where disambiguate :: Name -> Idris Name
886+ disambiguate n = do i <- getIState
887+ case lookupCtxtName n (idris_implicits i) of
888+ [(n', _)] -> return n'
889+ [] -> throwError (NoSuchVariable n)
890+ more -> throwError (CantResolveAlts (map (show . fst) more))
883891
884892pLangExt :: IdrisParser LanguageExt
885893pLangExt = (reserved "TypeProviders" >> return TypeProviders)