@@ -1,3 +1,4 @@
1+{-# LANGUAGE PatternGuards #-}
12module Idris.Providers where
23
34import Core.TT
@@ -19,16 +20,9 @@ unProv fc tm = PApp fc (PRef fc $ NS (UN "unProv") ["Providers"]) [PExp 0 False
1920
2021-- | Handle an error, if the type provider returned an error. Otherwise do nothing.
2122providerError :: TT Name -> Idris ()
22−providerError tm = case unApply tm of
23− (P _ (NS (UN "unProv") ["Providers"]) _, [_, tm']) ->
24− case unApply tm' of
25− (P _ (NS (UN "Error") ["Providers"]) _, [_, err]) ->
26− do str <- execute err
27− case (unApply str) of
28− (Constant (Str msg), []) ->
29− ierror . ProviderError $ msg
30− (P _ (UN "prim__IO") _, [_, (Constant (Str msg))]) ->
31− ierror . ProviderError $ msg
32− _ -> fail "Error in type provider."
33− _ -> return ()
34− _ -> return ()
23+providerError tm | (P _ unProv_case _, _:_:tm':_) <- unApply tm
24+ , (P _ (NS (UN "Error") ["Providers"]) _, [_, err]) <- unApply tm' =
25+ case err of
26+ Constant (Str msg) -> ierror . ProviderError $ msg
27+ _ -> fail "Error in type provider"
28+ | otherwise = return ()