on master help sign in
Merge pull request #1774 from raichoo/master

added IOExcept handler to FileIO effect

commit2e645e2ed9a69e3a6179b4c0c398f4b1363cd186 authorraichoo <raichoo@googlemail.com> dateSun 7 Dec 2014, 21:16 (12 years ago) parentd60c85e9ec6a5a
1 file changed+14
libs/effects/Effect/File.idr+14
libs/effects/Effect/File.idr+14
@@ -87,6 +87,20 @@ instance Handler FileIO IO where
8787 handle (FH h) EOF k = do e <- feof h
8888 k e (FH h)
8989
90+instance Handler FileIO (IOExcept a) where
91+ handle () (Open fname m) k = do h <- ioe_lift $ openFile fname m
92+ valid <- ioe_lift $ validFile h
93+ if valid then k True (FH h)
94+ else k False ()
95+ handle (FH h) Close k = do ioe_lift $ closeFile h
96+ k () ()
97+ handle (FH h) ReadLine k = do str <- ioe_lift $ fread h
98+ k str (FH h)
99+ handle (FH h) (WriteString str) k = do ioe_lift $ fwrite h str
100+ k () (FH h)
101+ handle (FH h) EOF k = do e <- ioe_lift $ feof h
102+ k e (FH h)
103+
90104-- -------------------------------------------------------------- [ The Effect ]
91105FILE_IO : Type -> EFFECT
92106FILE_IO t = MkEff t FileIO