Comments (3)
Thanks for the suggestion!
But I'm not quite sure about this.
The error-reporting philosophy currently is that we try to process as much as possible if it still kind of makes sense. The idea is to be resilient when programs are wrong, so we don't flood users with unrelated type errors. This is why we return "error" types when expressions don't make sense, but still register the binding, so it does not disturb later uses:
:e
def f (x y z) = add x y
//│ ╔══[ERROR] Unsupported pattern shape:
//│ ║ l.69: def f (x y z) = add x y
//│ ╙── ^^^^^
//│ f: error -> int
f 1
//│ res: int
As a use-case, imagine a user applies an IDE refactoring to rename a class to an illegal lower-case name. If we suddenly refuse to register the renamed class, the user will get tons of errors all over the place, as opposed to a single error pinpointing the invalid name.
from mlscript.
Thanks for the explanation.
I thought it was causing more errors in later use cases, which could have actually been due to my typos in the tests, as I am unable to reproduce it now...
I will keep this philosophy in mind as I implement methods, e.g. in resolving field selection vs. method calls. (I'm glad I brought up this discussion, which probably saved me some rewriting had I not implemented it with this philosophy in mind.
from mlscript.
You're welcome! And I should have told you about it earlier. On the other hand, it's not a very big deal, just a minor improvement that's nice to have.
from mlscript.
Related Issues (20)
- Simplify the `with` construct semantics
- Implement new MLscript syntax
- Traits should be implemented as proper mixins
- The next step of code generation
- TypeScript Libraries Support HOT 18
- Add comprehensive contribution guide
- Add documentation to the MLscript code base
- Type errors in class definitions are swallowed in the web demo
- Add support for class type difference HOT 1
- UCS tracking issue HOT 7
- Add enumerated types (not ADTs)
- Iron out semantics of new object definition parameters and fields HOT 3
- Implement virtuality and constructor restrictions HOT 1
- User-defined operators can lead to insufficient fuel and constraint leakage HOT 3
- Potential infinite loop in type checking HOT 3
- Constructors can be called with invalid parameters HOT 1
- Wrong mixin typing
- Some generic object types are not lattice homomorphisms and those which are should not be forall-distributivity targets
- Infinite loop in expanding abstract class with self type HOT 4
- Quasiquote syntax support HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mlscript.