4 ms·
I'm not disputing that Haskell makes it easier, but from a practical perspective I'd challenge the idea that nullability can't be turned off in Java with @NotNu
by hythloday 15y ago
I'm not disputing that Haskell makes it easier, but from a practical perspective I'd challenge the idea that nullability can't be turned off in Java with @NotNull annotations (and nullability inference tools like JastAdd[0]), or with decorators in Python. Do you see an essential difference in kind, or just a spectrum of ease of reasoning?
[0] http://jastadd.org/web/jastaddj/extensions.php http://jastadd.org/web/jastaddj/extensions.php
- yew 15y agoWould you mind expounding on that use of decorators? I'm not making the connection and it sounds like an interesting one.
- hythloday 15y agoSure, it's just a specific kind of type-checking decorator in the same vein as the ones you can see at e.g. [0]. Obviously it can be made a lot more sophisticated to only pick up certain arguments. You can do a similar thing with metaclasses to prevent object attributes being set as None, too. def isnotnone(fn): def decorator(*args, **kwargs): for arg in args: if arg is None: raise TypeError("{0} does not accept None".format(fn.func_name)) for arg in kwargs.values(): if arg is None: raise TypeError("{0} does not accept None".format(fn.func_name)) return fn(*args,**kwargs) return decorator @isnotnone def f(a, b=dict): return a(), b() >>> f(None) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 5, in decorator TypeError: f does not accept None >>> f(b=None) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 8, in decorator TypeError: f does not accept None >>> f() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 9, in decorator TypeError: f() takes at least 1 argument (0 given) >>> f(str) ('', {}) >>> [0]http://code.activestate.com/recipes/454322-type-checking-decorator/ http://code.activestate.com/recipes/454322-type-checking-dec...
- yew 15y agoThanks!