Code Monkey home page Code Monkey logo

Comments (6)

UlfNorell avatar UlfNorell commented on July 25, 2024 1

Forgot to tag any of the commits with a "fix" message.

from gradualizer.

UlfNorell avatar UlfNorell commented on July 25, 2024

A problem is that inferring the type using type_check_expr is likely to return any() for non-trivial arguments, which will make the whole thing vacuously true.

from gradualizer.

zuiderkwast avatar zuiderkwast commented on July 25, 2024

More type inference can be done using type_check_expr(Env#env{infer = true}, Expr). Do you see any problem in doing inference in this case with respect to the graduality property AKA gradual guarrantee from the papers?

from gradualizer.

josefs avatar josefs commented on July 25, 2024

Thanks for the thorough analysis. I suspect that there are a few similar problems lurking in the code.

The solution might be to compute the greatest lower bound of the result type and number() (in the case of addition). Something like this:

L = glb(number, R)
check(A, L)
check(B, L)
------------------
check(A + B, R)

Note that the glb-operator would be a partial operation and if it doesn't find a lower bound it would result in a type error.

Your thoughts on this solution, @UlfNorell?

EDIT: The glb-operator would technically not be partial, as it can always return none(); the bottom of the subtyping hierarchy. But if glb returns none() we should report a type error because it better matches programmer expectation.

from gradualizer.

UlfNorell avatar UlfNorell commented on July 25, 2024

I think this makes sense, although you can construct examples where one could argue that the "right" thing to do is not failing on none():

-spec much_type_very_code(none()) -> none().
much_type_very_code(X) -> X + X.

from gradualizer.

josefs avatar josefs commented on July 25, 2024

Yes, there would have to be a special case for when the result is expected to be none().

from gradualizer.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.