+ xunpickleVal unpickler
+
+
+
+-- | Is the given XML file unpickleable? Unpickling will be attempted
+-- using the @unpickler@ argument. If we unilaterally used the
+-- generic 'xpickle' function for our unpickler, a type ambiguity
+-- would result. By taking the unpickler as an argument, we allow
+-- the caller to indirectly specify a concrete type.
+--
+-- Apologies the the name; unpickleable means \"we can unpickle
+-- it\", not \"not pickleable.\"
+--
+unpickleable :: FilePath -> PU a -> IO Bool
+unpickleable filepath unpickler = do
+ xmldoc <- try_unpickle `catch` (\(SomeException _) -> return [])
+ return $ (not . null) xmldoc
+ where
+ try_unpickle = runX $ readDocument parse_opts filepath
+ >>>
+ xunpickleVal unpickler
+
+
+-- | Unpickle from a 'FilePath' using the given pickler. Explode if it
+-- doesn't work.
+--
+unsafe_unpickle :: FilePath -> PU a -> IO a
+unsafe_unpickle filepath unpickler =
+ fmap head $ runX $ xunpickleDocument unpickler parse_opts filepath
+
+
+-- | Read an XML document from a 'FilePath' into an XmlTree. Explode if it
+-- doesn't work.
+--
+unsafe_read_document :: FilePath -> IO XmlTree
+unsafe_read_document filepath =
+ fmap head $ runX $ readDocument parse_opts filepath