3 ms·
> Refinement types are pretty interesting Indeed. To me, they look like a formalized subset of precondition contracts that can be checked statically. I don't t
by klibertp 3y ago
> Refinement types are pretty interesting
Indeed. To me, they look like a formalized subset of precondition contracts that can be checked statically. I don't think the idea is new, I seem to recall Ada and Eiffel having something like this, but I first learned about them via Racket[1]. I still don't know how they work or what's needed to implement them.
Interestingly, Raku has a similar concept called `subset`, eg.
subset OneToTen of Int where * > 0 & * < 10;
but from what I know no static analysis is done on the refinement/"where" part, it's a runtime assertion only.
[1] https://blog.racket-lang.org/2017/11/adding-refinement-types.html https://blog.racket-lang.org/2017/11/adding-refinement-types...
- lizmat 3y agosubset OneToTen of Int where 1..10; Why make it more complicated? :-) The secret is that given values are smartmatched against the given object. And the values 1 through 10 will return True if smartmatched against the 1..10 Range object. The `of Int' ensures that only integer values are allowed, otherwise 3.14 would also match. Unless of course, that is what you intended. In which case you can omit the "of Int".
- frou_dh 3y agoRaku seems very cool - absolutely stuffed with gems like this to learn.