{-# LANGUAGE RankNTypes #-} import System.Zfs import Control.Monad.Except import Control.Monad.IO.Class main' :: Zfs () main' = do zpool <- getZpool "z" getZpoolName zpool forZpools_ $ \zpool -> do nm <- getZpoolName zpool liftIO $ putStrLn ("Pool: "++nm) vdevs <- getVdevs zpool liftIO $ print vdevs (do bla <- getZpool "bla" destroyZpool bla False) `catchError` \e -> return () createZpool "bla" [VdMirror[ VdFile "/z/home/spike/libzfs/testdev.img", VdFile "/z/home/spike/libzfs/testdev2.img"]] bla <- getZpool "bla" createFilesystem "bla/a" createFilesystem "bla/a/b" enableDatasets bla "" printZpoolConfig bla liftIO $ putStrLn "---- z ---" z <- getZpool "z" printZpoolConfig z return () plot :: Int -> Zdataset -> Zfs () plot indent node = do nm <- getDatasetName node let ind = replicate indent ' ' liftIO $ putStrLn (ind ++ nm) forChildren node $ plot (indent+2) liftIO $ putStrLn (ind ++ "--- Snapshots ---") forSnapshots node $ plot (indent+2) return () main = do res <- runZfs main' case res of Left e -> print e Right n -> return ()