module Data.PropertyList.Xml
( Plist
, readXmlPlist, showXmlPlist
, readXmlPlistFromFile, writeXmlPlistToFile
, PlistItem
, plistToPlistItem, plistItemToPlist
, UnparsedPlistItem(..)
, unparsedPlistItemToPlistItem
, readXmlPropertyList, readXmlPropertyListFromFile
, readXmlPartialPropertyList, showXmlPropertyList
, readXmlPartialPropertyListFromFile, writeXmlPropertyListToFile
) where
import Data.PropertyList.Algebra
import Data.PropertyList.Types
import Data.PropertyList.Xml.Parse
import Data.PropertyList.Xml.Types
import Control.Monad.Error ()
readXmlPlistFromFile :: FilePath -> IO (Either String Plist)
readXmlPlistFromFile path = do
contents <- readFile path
return (readXmlPlist contents)
writeXmlPlistToFile :: FilePath -> Plist -> IO ()
writeXmlPlistToFile path plist = do
writeFile path (showXmlPlist plist)
readXmlPartialPropertyList :: (PListCoalgebra f PlistItem, TerminalPList f pl) => String -> Either String pl
readXmlPartialPropertyList = fmap (toPlist . plistToPlistItem) . readXmlPlist
readXmlPropertyList :: FilePath -> Either String PropertyList
readXmlPropertyList str = do
x <- readXmlPartialPropertyList str :: Either String (PartialPropertyList UnparsedPlistItem)
completePropertyListByM (\unparsed -> Left ("Unparseable item found: " ++ show unparsed) :: Either String PropertyList) x
--readXmlPropertyList
showXmlPropertyList :: (InitialPList f pl, PListAlgebra f PlistItem) => pl -> String
showXmlPropertyList = showXmlPlist . plistItemToPlist . fromPlist
readXmlPartialPropertyListFromFile
:: (PListCoalgebra f PlistItem, TerminalPList f pl) =>
FilePath -> IO (Either String pl)
readXmlPartialPropertyListFromFile file = do
x <- readXmlPlistFromFile file
return (fmap (toPlist . plistToPlistItem) x)
readXmlPropertyListFromFile :: FilePath -> IO PropertyList
readXmlPropertyListFromFile file = do
x <- readXmlPartialPropertyListFromFile file :: IO (Either String (PartialPropertyList UnparsedPlistItem))
y <- either fail return x
completePropertyListByM (\unparsed -> fail ("Unparseable item found: " ++ show unparsed) :: IO PropertyList) y
writeXmlPropertyListToFile
:: (InitialPList f pl, PListAlgebra f PlistItem) =>
FilePath -> pl -> IO ()
writeXmlPropertyListToFile file plist = do
writeXmlPlistToFile file (plistItemToPlist (fromPlist plist))