6data OpenFile : Mode -> Type where
7 FH : File -> OpenFile m
9openOK : Mode -> Bool -> Type
10openOK m True = OpenFile m
13data FileIO : Effect where
14 Open : String -> (m : Mode) ->
15 {() ==> {res} if res then OpenFile m else ()} FileIO Bool
16 Close : {OpenFile m ==> ()} FileIO ()
18 ReadLine : {OpenFile Read} FileIO String
19 WriteLine : String -> {OpenFile Write} FileIO ()
20 EOF : {OpenFile Read} FileIO Bool
22instance Handler FileIO IO where
23 handle () (Open fname m) k = do h <- openFile fname m
25 if valid then k True (FH h)
27 handle (FH h) Close k = do closeFile h
29 handle (FH h) ReadLine k = do str <- fread h
31 handle (FH h) (WriteLine str) k = do fwrite h str
33 handle (FH h) EOF k = do e <- feof h
36FILE_IO : Type -> EFFECT
37FILE_IO t = MkEff t FileIO
39open : Handler FileIO e =>
40 String -> (m : Mode) ->
41 { [FILE_IO ()] ==> [FILE_IO (if result then OpenFile m else ())] } Eff e Bool
44close : Handler FileIO e =>
45 { [FILE_IO (OpenFile m)] ==> [FILE_IO ()] } Eff e ()
48readLine : Handler FileIO e =>
49 { [FILE_IO (OpenFile Read)] } Eff e String
52writeLine : Handler FileIO e =>
53 String -> { [FILE_IO (OpenFile Write)] } Eff e ()
54writeLine str = WriteLine str
56eof : Handler FileIO e =>
57 { [FILE_IO (OpenFile Read)] } Eff e Bool
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list