Bueno, he estado golpeando mi cabeza contra hint pero me doy por vencido por el momento. Sé que la sugerencia puede hacer esto, pero no estoy seguro de cómo. [editar] Consulte la respuesta de TomMD para saber cómo configurar las importaciones para la pista. [/ editar]
import Language.Haskell.Interpreter (eval, runInterpreter, Interpreter, InterpreterError)
main = do let resIO = eval "3" :: Interpreter String
res <- runInterpreter resIO
print res
Este carecer de interés produce Right "3"
como el resultado. Probé las siguientes variantes, pero se encontró con errores desconcertantes:
... eval "3 + 3" ....
-- yields --
Left (WontCompile [GhcError (errMsg = "Not in scope: `+'"])
El operador +
no está en el ámbito ??? wtf ...
import Language.Haskell.Interpreter (interpret, as, runInterpreter, Interpreter)
main = do let resIO = interpret "3" (as :: Int) :: Interpreter Int
res <- runInterpreter resIO
print res
-- yields --
Left (WontCompile [GhcError (errMsg = "Not in scope: type constructor or class 'Int'")])
La clase Int
no está en el ámbito ??? ugh ...
Invito a los que tienen más conocimientos que yo a exponer los detalles más finos de la pista.
Por supuesto, es posible. Pero creo que deberías usar una mejor representación para las expresiones.Una pista puede ser su frase "convertir toda la expresión de cadena". La pregunta es: ¿convertir a ** qué **? – Ingo
Creo que yoz quiere evaluarlo, y está usando el término convertir como 'convertir a un resultado'. – mdm
@mdm, seguro, por eso estoy pidiendo: hacerle comprender que la conversión y la evaluación son cosas diferentes. O evalúa la cadena directamente (que ya rechazó), o convierte (¿a qué? Esta es la pregunta clave) y luego evalúa eso. – Ingo