0 | module Stellar.REPL
 1 |
 2 | import public Stellar.API
 3 | import public Stellar.API.Morphism
 4 |
 5 | -- A REPL interface takes strings as input and has strings as outputs
 6 | public export
 7 | REPL : API
 8 | REPL = Through String
 9 |
10 | partial export
11 | repl : HasIO io => (String -> io String) -> io Void
12 | repl f = do
13 |   line <- getLine
14 |   output <- f line
15 |   putStrLn output
16 |   repl f
17 |
18 | partial export
19 | repl' : HasIO io => Costate (Lift io REPL) -> io Void
20 | repl' x = repl (extract x)
21 |
22 | partial export
23 | pureRepl : HasIO io => Costate REPL -> io Void
24 | pureRepl x = repl (pure . (extract x))
25 |