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