{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE OverlappingInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
import System.Lifted
import System.Directory.Lifted
import qualified System.Directory as D
import Control.Monad.Trans.Either
import Control.Monad.Trans.Maybe
import Control.Applicative
import qualified Data.Text as T
import qualified Data.Text.IO as T
import GHC.IO.Exception
type EitherString = EitherT String
deriveSystemLiftedErrors "DisallowIOE [HardwareFault]" ''MaybeT
deriveSystemLiftedErrors "AllIOE" ''EitherString
deriveSystemDirectory ''MaybeT
deriveSystemDirectory ''EitherString
main :: IO ()
main = do
m <- runMaybeT $ createDirectory "abc"
r <- runEitherT $ bimapEitherT T.pack id $ do
createDirectory "cde"
createDirectory "cdd"
print m
case r of
Left s -> T.putStrLn s
Right _ -> putStrLn "OK"
j <- runEitherT $ ioFilterT (DisallowIOE [HardwareFault]) $ do
D.createDirectory "ajj"
D.createDirectory "aji"
case j of
Left s -> Prelude.putStrLn s
Right _ -> putStrLn "OK!"
print j
x <- runMaybeT $ joinMaybeMT (findFile ["."] "LICENSE")
<|> getHomeDirectory
print x
putStrLn "end"