Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: neocon 26. 02. 2018, 13:23:09

Název: Higher-kinded types
Přispěvatel: neocon 26. 02. 2018, 13:23:09
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.
Název: Re:Higher-kinded types
Přispěvatel: Sten 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.
Název: Re:Higher-kinded types
Přispěvatel: Labrat 26. 02. 2018, 14:32:40
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.
Název: Re:Higher-kinded types
Přispěvatel: Labrat 26. 02. 2018, 15:01:35
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").
Název: Re:Higher-kinded types
Přispěvatel: Sten 26. 02. 2018, 15:36:39
Function<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<?,?>.
Název: Re:Higher-kinded types
Přispěvatel: Labrat 26. 02. 2018, 15:39:43
Function<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).
Název: Re:Higher-kinded types
Přispěvatel: Labrat 26. 02. 2018, 15:49:15
Function<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. *).
Název: Re:Higher-kinded types
Přispěvatel: Phi 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ázev: Re:Higher-kinded types
Přispěvatel: v 26. 02. 2018, 18:54:57
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)
Název: Re:Higher-kinded types
Přispěvatel: itsux 26. 02. 2018, 22:05:19
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.
Název: Re:Higher-kinded types
Přispěvatel: Labrat 26. 02. 2018, 22:38:55
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.
Název: Re:Higher-kinded types
Přispěvatel: Func 18. 04. 2018, 15:42:48
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