1
1
mirror of https://github.com/github/semantic.git synced 2024-11-28 10:15:55 +03:00
This commit is contained in:
Rick Winfrey 2018-08-06 15:29:15 -07:00
parent 10c99d3549
commit dc98e5ef9d
3 changed files with 69 additions and 13 deletions

View File

@ -111,7 +111,9 @@ runEnv initial = fmap (filterEnv . fmap (first Env.head)) . runState lowerBound
| Exports.null ports = (binds, a)
| otherwise = (Exports.toBindings ports <> Env.aliasBindings (Exports.aliases ports) binds, a)
handleEnv :: forall address value effects a . Effects effects => Env address (Eff (Env address ': effects)) a -> Evaluator address value (State (Environment address) ': State (Exports address) ': effects) a
handleEnv :: forall address value effects a . Effects effects
=> Env address (Eff (Env address ': effects)) a
-> Evaluator address value (State (Environment address) ': State (Exports address) ': effects) a
handleEnv = \case
Lookup name -> Env.lookupEnv' name <$> get
Bind name addr -> modify (Env.insertEnv name addr)
@ -141,10 +143,15 @@ freeVariableError :: ( Member (Reader ModuleInfo) effects
-> Evaluator address value effects address
freeVariableError = throwEnvironmentError . FreeVariable
runEnvironmentError :: (Effectful (m address value), Effects effects) => m address value (Resumable (BaseError (EnvironmentError address)) ': effects) a -> m address value effects (Either (SomeExc (BaseError (EnvironmentError address))) a)
runEnvironmentError :: (Effectful (m address value), Effects effects)
=> m address value (Resumable (BaseError (EnvironmentError address)) ': effects) a
-> m address value effects (Either (SomeExc (BaseError (EnvironmentError address))) a)
runEnvironmentError = runResumable
runEnvironmentErrorWith :: (Effectful (m address value), Effects effects) => (forall resume . BaseError (EnvironmentError address) resume -> m address value effects resume) -> m address value (Resumable (BaseError (EnvironmentError address)) ': effects) a -> m address value effects a
runEnvironmentErrorWith :: (Effectful (m address value), Effects effects)
=> (forall resume . BaseError (EnvironmentError address) resume -> m address value effects resume)
-> m address value (Resumable (BaseError (EnvironmentError address)) ': effects) a
-> m address value effects a
runEnvironmentErrorWith = runResumableWith
throwEnvironmentError :: ( Member (Resumable (BaseError (EnvironmentError address))) effects

View File

@ -109,10 +109,15 @@ instance Show1 (LoadError address) where
instance Eq1 (LoadError address) where
liftEq _ (ModuleNotFoundError a) (ModuleNotFoundError b) = a == b
runLoadError :: (Effectful (m address value), Effects effects) => m address value (Resumable (BaseError (LoadError address)) ': effects) a -> m address value effects (Either (SomeExc (BaseError (LoadError address))) a)
runLoadError :: (Effectful (m address value), Effects effects)
=> m address value (Resumable (BaseError (LoadError address)) ': effects) a
-> m address value effects (Either (SomeExc (BaseError (LoadError address))) a)
runLoadError = runResumable
runLoadErrorWith :: (Effectful (m address value), Effects effects) => (forall resume . (BaseError (LoadError address)) resume -> m address value effects resume) -> m address value (Resumable (BaseError (LoadError address)) ': effects) a -> m address value effects a
runLoadErrorWith :: (Effectful (m address value), Effects effects)
=> (forall resume . (BaseError (LoadError address)) resume -> m address value effects resume)
-> m address value (Resumable (BaseError (LoadError address)) ': effects) a
-> m address value effects a
runLoadErrorWith = runResumableWith
throwLoadError :: Member (Resumable (BaseError (LoadError address))) effects
@ -138,11 +143,23 @@ instance Eq1 ResolutionError where
liftEq _ (GoImportError a) (GoImportError b) = a == b
liftEq _ _ _ = False
runResolutionError :: (Effectful m, Effects effects) => m (Resumable (BaseError ResolutionError) ': effects) a -> m effects (Either (SomeExc (BaseError ResolutionError)) a)
runResolutionError :: (Effectful m, Effects effects)
=> m (Resumable (BaseError ResolutionError) ': effects) a
-> m effects (Either (SomeExc (BaseError ResolutionError)) a)
runResolutionError = runResumable
runResolutionErrorWith :: (Effectful m, Effects effects) => (forall resume . (BaseError ResolutionError) resume -> m effects resume) -> m (Resumable (BaseError ResolutionError) ': effects) a -> m effects a
runResolutionErrorWith :: (Effectful m, Effects effects)
=> (forall resume . (BaseError ResolutionError) resume -> m effects resume)
-> m (Resumable (BaseError ResolutionError) ': effects) a
-> m effects a
runResolutionErrorWith = runResumableWith
throwResolutionError :: (Monad (m effects), Effectful m, Member (Reader ModuleInfo) effects, Member (Reader Span) effects, Member (Resumable (BaseError ResolutionError)) effects) => ResolutionError resume -> m effects resume
throwResolutionError :: ( Monad (m effects)
, Effectful m
, Member (Reader ModuleInfo) effects
, Member (Reader Span) effects
, Member (Resumable (BaseError ResolutionError)) effects
)
=> ResolutionError resume
-> m effects resume
throwResolutionError err = currentErrorContext >>= \ errorContext -> throwResumable $ BaseError errorContext err

View File

@ -243,16 +243,36 @@ withTermSpans :: ( HasField fields Span
-> SubtermAlgebra (TermF syntax (Record fields)) term (TermEvaluator term address value effects a)
withTermSpans recur term = withCurrentSpan (getField (termFAnnotation term)) (recur term)
resumingResolutionError :: (Applicative (m effects), Effectful m, Member Trace effects, Effects effects) => m (Resumable (BaseError ResolutionError) ': effects) a -> m effects a
resumingResolutionError :: ( Applicative (m effects)
, Effectful m
, Member Trace effects
, Effects effects
)
=> m (Resumable (BaseError ResolutionError) ': effects) a
-> m effects a
resumingResolutionError = runResolutionErrorWith (\ (BaseError context err) -> traceError "ResolutionError" err context *> case err of
NotFoundError nameToResolve _ _ -> pure nameToResolve
GoImportError pathToResolve -> pure [pathToResolve])
resumingLoadError :: (Applicative (m address value effects), AbstractHole address, Effectful (m address value), Effects effects, Member Trace effects) => m address value (Resumable (BaseError (LoadError address)) ': effects) a -> m address value effects a
resumingLoadError :: ( Applicative (m address value effects)
, AbstractHole address
, Effectful (m address value)
, Effects effects
, Member Trace effects
)
=> m address value (Resumable (BaseError (LoadError address)) ': effects) a
-> m address value effects a
resumingLoadError = runLoadErrorWith (\ (BaseError context err) -> traceError "LoadError" err context *> case err of
ModuleNotFoundError _ -> pure (lowerBound, hole))
resumingEvalError :: (Applicative (m effects), Effectful m, Effects effects, Member Fresh effects, Member Trace effects) => m (Resumable (BaseError EvalError) ': effects) a -> m effects a
resumingEvalError :: ( Applicative (m effects)
, Effectful m
, Effects effects
, Member Fresh effects
, Member Trace effects
)
=> m (Resumable (BaseError EvalError) ': effects) a
-> m effects a
resumingEvalError = runEvalErrorWith (\ (BaseError context err) -> traceError "EvalError" err context *> case err of
DefaultExportError{} -> pure ()
ExportError{} -> pure ()
@ -261,7 +281,13 @@ resumingEvalError = runEvalErrorWith (\ (BaseError context err) -> traceError "E
RationalFormatError{} -> pure 0
NoNameError -> gensym)
resumingUnspecialized :: (Applicative (m value effects), AbstractHole value, Effectful (m value), Effects effects, Member Trace effects) => m value (Resumable (BaseError (UnspecializedError value)) ': effects) a -> m value effects a
resumingUnspecialized :: ( Applicative (m value effects)
, AbstractHole value
, Effectful (m value)
, Effects effects
, Member Trace effects)
=> m value (Resumable (BaseError (UnspecializedError value)) ': effects) a
-> m value effects a
resumingUnspecialized = runUnspecializedWith (\ (BaseError context err) -> traceError "UnspecializedError" err context *> case err of
UnspecializedError _ -> pure hole)
@ -302,7 +328,13 @@ resumingValueError = runValueErrorWith (\ (BaseError context err) -> traceError
KeyValueError{} -> pure (hole, hole)
ArithmeticError{} -> pure hole)
resumingEnvironmentError :: (Monad (m (Hole (Maybe Name) address) value effects), Effectful (m (Hole (Maybe Name) address) value), Effects effects, Member Trace effects) => m (Hole (Maybe Name) address) value (Resumable (BaseError (EnvironmentError (Hole (Maybe Name) address))) ': effects) a -> m (Hole (Maybe Name) address) value effects a
resumingEnvironmentError :: ( Monad (m (Hole (Maybe Name) address) value effects)
, Effectful (m (Hole (Maybe Name) address) value)
, Effects effects
, Member Trace effects
)
=> m (Hole (Maybe Name) address) value (Resumable (BaseError (EnvironmentError (Hole (Maybe Name) address))) ': effects) a
-> m (Hole (Maybe Name) address) value effects a
resumingEnvironmentError = runResumableWith (\ (BaseError context err) -> traceError "EnvironmentError" err context >> (\ (FreeVariable name) -> pure (Partial (Just name))) err)
resumingTypeError :: ( Alternative (m address Type (State TypeMap ': effects))