mueval-0.8.2: Safely evaluate Haskell expressions

Safe Haskell | Safe-Infered

Mueval.Interpreter

Synopsis

- interpreter :: Options -> Interpreter (String, String, String)
- interpreterSession :: Options -> IO ()
- mvload :: FilePath -> IO ()
- sayIO :: String -> IO ()
- printInterpreterError :: InterpreterError -> IO ()
- exceptionMsg :: String
- render :: (MonadIO m, Functor m) => Int -> String -> m (String, Bool)
- data Stream
  - = Cons Char (IO Stream)
  - | Exception (IO Stream)
  - | End
- toStream :: String -> IO Stream

# Documentation

interpreter :: Options -> Interpreter (String, String, String)

The actual calling of Hint functionality. The heart of this just calls `eval`, but we do so much more - we disable Haskell extensions, hide all packages, make sure one cannot call unimported functions, typecheck, set resource limits for this thread, and do some error handling.

interpreterSession :: Options -> IO ()

Wrapper around `interpreter`; supplies a fresh GHC API session and error-handling. The arguments are largely passed on, and the results lightly parsed.

mvload :: FilePath -> IO ()

sayIO :: String -> IO ()

Print the String (presumably the result of interpreting something), but only print the first 1024 characters to avoid flooding. Lambdabot has a similar limit.

printInterpreterError :: InterpreterError -> IO ()

Oh no, something has gone wrong. If it's a compilation error pretty print the first 1024 chars of it and throw an ExitException otherwise rethrow the exception in String form.

exceptionMsg :: String

render

Arguments

:: (MonadIO m, Functor m) |
=> Int | max number of characters to include
-> String | input
-> m (String, Bool) | ( output, `True` if we found an exception )

Renders the input String including its exceptions using `exceptionMsg`

data Stream

Constructors

Cons Char (IO Stream) |
Exception (IO Stream) |
End |

toStream :: String -> IO Stream