Re:Examples of Incorrect Abstractions in Other Languages
by anentropic on Wednesday May 20, 2020 @05:44AM
(#23244981)
Actually, I believe this is expressible in Python's type system:
# Python 3.8
from typing import Protocol, TypeVar
T = TypeVar('T')
class Summable(Protocol[T]):
def __add__(self, other: T) -> T: ...
In Python 3.4-3.7 you'd need to install typing-extensions library: from typing_extensions import Protocol
Re:Examples of Incorrect Abstractions in Other Languages
by still_grokking on Wednesday May 20, 2020 @09:28AM
(#23246551)
Interesting. It seems that "every second language" gets "type-classes" these days…
C++ added such feature, this above looks like a Python version, Rust has it, Scala had them as one of the first "OOP" languages.
It's nice to see that Haskell pioneered a very useful and now spreading language feature!
Re:Examples of Incorrect Abstractions in Other Languages
by sacado2 on Wednesday May 20, 2020 @06:05PM
(#23252504)
Ada had them before Haskell, and I'm not even sure it was the first language with them.
Re:Examples of Incorrect Abstractions in Other Languages
by naasking on Wednesday May 20, 2020 @08:01AM
(#23245817)
> There's no language in which you would be able to write a function for arbitrary data structures using sum(), and get a reasonable outcome.
Computing the number of bytes used by a data type seems perfectly reasonable use of sum in that context. This is also achievable in many languages. All 'sum' needs is a map from a value to a number, which can have many sensible meanings even for arbitrary data types.
Re:Examples of Incorrect Abstractions in Other Languages
by dragonwriter on Wednesday May 20, 2020 @11:07AM
(#23247740)
And that works in python to, even if the source type is strings:
sum(map(mappingFunction, iterable))
works fine as long as mappingFunction maps the elements of an iterable to numbers.
The problem with Python is that it doesn't have typing that can express "I can sum".