
Hi all, The Q Monad in template haskell has fail method. As I understand it, it throws some kind of exception. How do I catch this exception? Some code I'm trying to create: infoToCode :: Info -> Q Exp infoToCode (ClassI dec) = -- ClassI Dec fail "ClassI not supported" -- this will be implemented infoToCode (ClassOpI name xtype name2 fixity) = -- ClassOpI Name Type Name Fixity fail "ClassOpI not supported" infoToCode (TyConI dec) = -- TyConI Dec fail "TyConI not supported" infoToCode (PrimTyConI name int bool) = -- PrimTyConI Name Int Bool fail "PrimTyConI not supported" infoToCode (DataConI name xtype name2 fixity) = -- DataConI Name Type Name Fixity fail "DataConI not supported" infoToCode (VarI name xtype maybedec fixity) = -- VarI Name Type (Maybe Dec) Fixity fail "TVarI not supported" infoToCode (TyVarI name xtype) = -- TyVarI Name Type fail "TyVarI not supported" nameToCode1 :: Name -> Q Exp nameToCode1 name = do info <- reify name Code <- infoToCode info runIO $ putStrLn $ pprint Code return Code -- Here be dragons... nameToCode name = nameToCode1 name `catch` c where c e = do runIO $ putStrLn $ show e fail "refailed" -- Gracjan
participants (1)
-
Gracjan Polak