mps-coderules/coderules
Grigorii Kirgizov e8cb6f9ad2 Add rule for determining correct type to bind inference variable to. Fixes MPSCR-13.
The inferred type can be either capture or type variable.
This logic is covered by a new rule 'inferFromCapture'.
For examples see 'Bounds' test sample.

This inference is used in call arguments type inference.
It happens on cases when bounds arise from several places:
 (a) bounds for inference variables from type vars declared in method signature (hasBound constraint)
 (b) bounds of type vars used as arguments to call (typeVariableType term wiht bounds inside)
 (c) bounds from captures on type variables from case (b), which come in the form of 'captureOf' term
2019-12-18 21:47:07 +03:00
..
doc/img Update readme files. 2018-07-19 15:12:34 +02:00
languages Fix minor bug concerned with CopyUtil 2019-12-18 21:47:06 +03:00
solutions Add rule for determining correct type to bind inference variable to. Fixes MPSCR-13. 2019-12-18 21:47:07 +03:00
README.md Fix paths to images. 2018-07-19 15:17:06 +02:00

README.md

Code Rules - Implementation Notes

Structure

The project modules are separated into several groups to separate levels of abstraction.

Logic

Define fundamental ideas used throughout the implementation, such as «data form» (a.k.a. term), logical variables, and others.

Code rules

Modules in this group define the core concepts of coderules and the logic behind it. This includes constraints, predicates, handlers, as well as code rule templates.

Constraints activation trace view for debugging the process of evaluating constraint rules.

Activation trace

Once finished, constraint rules produce inferred types and type errors, which are added as highlighter annotations to the editor.

Type checking

Defines a custom aspect «types», which is used to store the typing rules in the language source code.

Example of a typing rule

Type checking plugin for MPS provides the actions for checking the types in a currently opened root.

Control flow

Declares only control flow aspect. All functionality is inherited from coderules language.