J'essaie d'utiliser hint
paquet de hackage
pour créer un environnement simple où l'utilisateur peut émettre des lignes de code pour l'évaluation (comme dans ghci). Je m'attends à ce que certaines des lignes d'entrée soient erronées (eval
mettrait fin à la session avec une erreur). Comment puis-je créer une session robuste qui ignore une entrée erronée (ou mieux: elle signale une erreur mais peut accepter une autre entrée) et conserve l'état précédemment cohérent?Est-il possible de récupérer à partir d'un eval erroné dans l'indice?
En outre, je voudrais l'utiliser dans le style do
, c'est-à-dire let a = 3
car une ligne d'entrée autonome est logique. Pour clarifier les choses: Je n'ai aucun problème avec un seul eval
. Ce que je voudrais faire, c'est permettre une évaluation continue même après l'échec d'une étape. Aussi je voudrais étendre progressivement une chaîne monadique (comme vous le faites dans ghci
je suppose). En d'autres termes: Je veux quelque chose comme ceci, sauf que je peux évaluer 3
et ne pas arrêter à undefined
avec l'erreur.
runInterpreter $ setImports [ "Prelude" ] >> eval "undefined" >> eval "3"
Plus précisément, je voudrais quelque chose comme cela soit possible:
runInterpreter $ setImports ... >> eval' "let a = (1, 2)" -- modifying context
>> typeOf "b" -- error but not breaking the chain
>> typeOf "a" -- (Num a, Num b) => (a, b)
Je ne m'y attendais pas à travailler ce sans détour, cela est juste pour montrer l'idée. Je voudrais fondamentalement construire un contexte (comme vous le faites dans ghci) et chaque ajout au contexte le modifierait seulement s'il n'y a pas d'échec, les échecs pourraient être consignés ou explicitement récupérés après chaque tentative de modification du contexte.
J'ai modifié la question, j'espère que cela clarifie mes intentions. – jakubdaniel