From 0a2d18ec27a6ef1dea90e57632834a7eb84bb9cf Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Tue, 23 Aug 2022 12:32:38 +0200 Subject: Added advanced suggestion AI blockchain soon --- src/Eval.hs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/Eval.hs') diff --git a/src/Eval.hs b/src/Eval.hs index 2f1bb7e..fe8dbe8 100644 --- a/src/Eval.hs +++ b/src/Eval.hs @@ -8,6 +8,7 @@ import Control.Monad.State import qualified Control.Monad.State.Strict as StrictState import qualified Data.BitString as Bit import qualified Data.ByteString as Byte +import Data.Function ( on ) import Data.List import qualified Data.Map as M import Data.Maybe @@ -67,9 +68,17 @@ evalFun fun (Environment sub) = state $ \env@(Environment e) -> let lookup' name env' = case M.lookup fun env' of Nothing -> Left $ UndefinedIdentifier name Just (EnvDef { _exp = x }) -> Right x + matching n + | length e == 0 = "" + | otherwise = snd $ minimumBy (compare `on` fst) $ map + (\f -> (levenshtein (functionName f) n, show f)) + (M.keys e) + suggest (Left u@(UndefinedIdentifier n)) = + Left $ SuggestSolution u (matching $ functionName n) + suggest x = x in case lookup' fun sub of -- search in sub env s@(Right _) -> (s, env) - _ -> (lookup' fun e, env) -- search in global env + _ -> (suggest $ lookup' fun e, env) -- search in global env evalAbs :: Expression -> Environment -> EvalState (Failable Expression) evalAbs e sub = evalExp e sub >>= pure . fmap Abstraction -- cgit v1.2.3