HKT mi přijdou super užitečné, je nějaký praktický důvod, proč se vyskytují jen ve funkcionálním programování? Kromě C++ teda, ale tam je zase celá syntax na palici, takže to člověk radši nepoužije.
Obdoba higher-order types je i v Javě (Function<T,R>) a C (void(*func)()), akorát nejsou přímo podporované typovým systémem, takže to formálně nejsou higher-order types.
Citace od: Sten kdy 26. 02. 2018, 14:06:49
Obdoba higher-order types je i v Javě (Function<T,R>) a C (void(*func)()), akorát nejsou přímo podporované typovým systémem, takže to formálně nejsou higher-order types.
Function<T,R> není HKT, jeho kind je *→*→*. Aby to byl HKT, muselo by T nebo R být generické, což v Javě nejde. V C++ jde udělat například (*→*)→*, kde kind je řádu 1.
Citace od: Sten kdy 26. 02. 2018, 14:06:49
Obdoba higher-order types je i v Javě (Function<T,R>) a C (void(*func)()), akorát nejsou přímo podporované typovým systémem, takže to formálně nejsou higher-order types.
Jinak HKT mozná dávají smysl hlavně ve funkcionálním paradigmatu, v OOP se těžko hledá nějaký neakademický příklad z praxe. Jinak jak tu nedávno kdosi psal, do Rustu a Swiftu autoři HKT nedali, neboť dle jejich slov je to na většinu vývojářů moc složité (v kódu by se pak často objevovalo ono neslavně proslulé "you are not expected to understand this").
Citace od: Labrat kdy 26. 02. 2018, 14:32:40Function<T,R> není HKT, jeho kind je *→*→*. Aby to byl HKT, muselo by T nebo R být generické, což v Javě nejde.
Function<?,?>. A za ? může být klidně další
Function<?,?>.
Citace od: Sten kdy 26. 02. 2018, 15:36:39
Citace od: Labrat kdy 26. 02. 2018, 14:32:40Function<T,R> není HKT, jeho kind je *→*→*. Aby to byl HKT, muselo by T nebo R být generické, což v Javě nejde.
Function<?,?>. A za ? může být klidně další Function<?,?>.
Ano, a to bude pořád jen *→*→*, protože parametry budou jen konkrétní typy, takže HKT se nekoná (v Javě jsou typové parametry jen plně specifikované typy).
Citace od: Sten kdy 26. 02. 2018, 15:36:39
Citace od: Labrat kdy 26. 02. 2018, 14:32:40Function<T,R> není HKT, jeho kind je *→*→*. Aby to byl HKT, muselo by T nebo R být generické, což v Javě nejde.
Function<?,?>. A za ? může být klidně další Function<?,?>.
P.S. Po lopatě (v C++):
Function<T,R> odpovídá
function<R(T)>, což není HKT. HKT v C++ jsou templates templates, tedy
template<template<typename> class T> ... - kind (*→*)→*, což ovšem Java neumí - parametrem generického typu je vždy konkrétní typ (tj. *).
Tak já do toho hodím vidle. Co si myslíte o tomto:
https://medium.com/@johnmcclean/simulating-higher-kinded-types-in-java-b52a18b72c74
Citace od: Phi kdy 26. 02. 2018, 18:46:42
Tak já do toho hodím vidle. Co si myslíte o tomto:
https://medium.com/@johnmcclean/simulating-higher-kinded-types-in-java-b52a18b72c74
RFC1925 2. (3)
Citace od: Phi kdy 26. 02. 2018, 18:46:42
Tak já do toho hodím vidle. Co si myslíte o tomto:
https://medium.com/@johnmcclean/simulating-higher-kinded-types-in-java-b52a18b72c74
To je hnus, velebnosti.
Citace od: Phi kdy 26. 02. 2018, 18:46:42
Tak já do toho hodím vidle. Co si myslíte o tomto:
https://medium.com/@johnmcclean/simulating-higher-kinded-types-in-java-b52a18b72c74
Něco na těch HKT bude, když i Sten se zamotal do higher-order functions, což je něco zcela jiného než higher-kinded typové konstruktory. Ovšem ta simulace v Javě je hnůj.
Citace od: itsux kdy 26. 02. 2018, 22:05:19
Citace od: Phi kdy 26. 02. 2018, 18:46:42
Tak já do toho hodím vidle. Co si myslíte o tomto:
https://medium.com/@johnmcclean/simulating-higher-kinded-types-in-java-b52a18b72c74
To je hnus, velebnosti.
https://goo.gl/HoykJn