@@ -0,0 +1,141 @@
1+-- | Lifted version of "System.IO".
2+module Effectful.FileSystem.IO
36+import qualified System.IO as IO
37+import System.IO (Handle, IOMode (..))
39+import Effectful.Dispatch.Static
40+import Effectful.FileSystem.Effect
41+import Effectful.Monad
43+-- | Lifted version of 'IO.withFile'.
48+ -> (Handle -> Eff es a)
50+withFile fp mode inner = unsafeUnliftIO $ \unlift -> do
51+ IO.withFile fp mode $ unlift . inner
53+-- | Lifted version of 'IO.withBinaryFile'.
58+ -> (Handle -> Eff es a)
60+withBinaryFile fp mode inner = unsafeUnliftIO $ \unlift -> do
61+ IO.withBinaryFile fp mode $ unlift . inner
63+-- | Lifted version of 'IO.openFile'
64+openFile :: FileSystem :> es => FilePath -> IOMode -> Eff es Handle
65+openFile fp = unsafeEff_ . IO.openFile fp
67+-- | Lifted version of 'IO.hClose'
68+hClose :: FileSystem :> es => Handle -> Eff es ()
69+hClose = unsafeEff_ . IO.hClose
71+-- | Lifted version of 'IO.hFlush'
72+hFlush :: FileSystem :> es => Handle -> Eff es ()
73+hFlush = unsafeEff_ . IO.hFlush
75+-- | Lifted version of 'IO.hFileSize'
76+hFileSize :: FileSystem :> es => Handle -> Eff es Integer
77+hFileSize = unsafeEff_ . IO.hFileSize
79+-- | Lifted version of 'IO.hSetFileSize'
80+hSetFileSize :: FileSystem :> es => Handle -> Integer -> Eff es ()
81+hSetFileSize h = unsafeEff_ . IO.hSetFileSize h
83+-- | Lifted version of 'IO.hIsEOF'
84+hIsEOF :: FileSystem :> es => Handle -> Eff es Bool
85+hIsEOF = unsafeEff_ . IO.hIsEOF
87+-- | Lifted version of 'IO.hSetBuffering'
88+hSetBuffering :: FileSystem :> es => Handle -> IO.BufferMode -> Eff es ()
89+hSetBuffering h = unsafeEff_ . IO.hSetBuffering h
91+-- | Lifted version of 'IO.hGetBuffering'
92+hGetBuffering :: FileSystem :> es => Handle -> Eff es IO.BufferMode
93+hGetBuffering = unsafeEff_ . IO.hGetBuffering
95+-- | Lifted version of 'IO.hSeek'
96+hSeek :: FileSystem :> es => Handle -> IO.SeekMode -> Integer -> Eff es ()
97+hSeek h s = unsafeEff_ . IO.hSeek h s
99+-- | Lifted version of 'IO.hTell'
100+hTell :: FileSystem :> es => Handle -> Eff es Integer
101+hTell = unsafeEff_ . IO.hTell
103+-- | Lifted version of 'IO.hIsOpen'
104+hIsOpen :: FileSystem :> es => Handle -> Eff es Bool
105+hIsOpen = unsafeEff_ . IO.hIsOpen
107+-- | Lifted version of 'IO.hIsClosed'
108+hIsClosed :: FileSystem :> es => Handle -> Eff es Bool
109+hIsClosed = unsafeEff_ . IO.hIsClosed
111+-- | Lifted version of 'IO.hIsReadable'
112+hIsReadable :: FileSystem :> es => Handle -> Eff es Bool
113+hIsReadable = unsafeEff_ . IO.hIsReadable
115+-- | Lifted version of 'IO.hIsWritable'
116+hIsWritable :: FileSystem :> es => Handle -> Eff es Bool
117+hIsWritable = unsafeEff_ . IO.hIsWritable
119+-- | Lifted version of 'IO.hIsSeekable'
120+hIsSeekable :: FileSystem :> es => Handle -> Eff es Bool
121+hIsSeekable = unsafeEff_ . IO.hIsSeekable
123+-- | Lifted version of 'IO.hIsTerminalDevice'
124+hIsTerminalDevice :: FileSystem :> es => Handle -> Eff es Bool
125+hIsTerminalDevice = unsafeEff_ . IO.hIsTerminalDevice
127+-- | Lifted version of 'IO.hSetEcho'
128+hSetEcho :: FileSystem :> es => Handle -> Bool -> Eff es ()
129+hSetEcho h = unsafeEff_ . IO.hSetEcho h
131+-- | Lifted version of 'IO.hGetEcho'
132+hGetEcho :: FileSystem :> es => Handle -> Eff es Bool
133+hGetEcho = unsafeEff_ . IO.hGetEcho
135+-- | Lifted version of 'IO.hWaitForInput'
136+hWaitForInput :: FileSystem :> es => Handle -> Int -> Eff es Bool
137+hWaitForInput h = unsafeEff_ . IO.hWaitForInput h
139+-- | Lifted version of 'IO.hReady'
140+hReady :: FileSystem :> es => Handle -> Eff es Bool
141+hReady = unsafeEff_ . IO.hReady