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
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to