Dědičnost funkcionálně

LambdaBender

Dědičnost funkcionálně
« kdy: 12. 07. 2018, 14:53:26 »
Ahoj, učím se Haskell a zajímalo by mě, jestli lze v Hasku nějak formálně vyjádřit dědičnost. Odpovídá dědičnosti (podtypům) nějaká matematická vlastnost nebo relace? Možná mi něco uniklo, ale v Hasku vidím jen typové konstruktory, ne vyjádření vlastnosti být podtypem.


Re:Dědičnost funkcionálně
« Odpověď #1 kdy: 12. 07. 2018, 15:18:49 »
Ahoj, učím se Haskell a zajímalo by mě, jestli lze v Hasku nějak formálně vyjádřit dědičnost. Odpovídá dědičnosti (podtypům) nějaká matematická vlastnost nebo relace? Možná mi něco uniklo, ale v Hasku vidím jen typové konstruktory, ne vyjádření vlastnosti být podtypem.

Typove tridy uz jsi videl?

https://en.wikibooks.org/wiki/Haskell/Classes_and_types#Class_inheritance

Ten koncept rozsirovani chovani je o neco oddlenejsi od rozsirovani datovych struktur nez v Java/C++/Ruby.. style.

Polymorfismus muzes casto vyjadrit tak, ze proste mas vic funkci se stejnym typem a nekterou z nich mas nekam "prirazenou".

LambdaBender

Re:Dědičnost funkcionálně
« Odpověď #2 kdy: 12. 07. 2018, 15:22:25 »
Ahoj, učím se Haskell a zajímalo by mě, jestli lze v Hasku nějak formálně vyjádřit dědičnost. Odpovídá dědičnosti (podtypům) nějaká matematická vlastnost nebo relace? Možná mi něco uniklo, ale v Hasku vidím jen typové konstruktory, ne vyjádření vlastnosti být podtypem.

Typove tridy uz jsi videl?

https://en.wikibooks.org/wiki/Haskell/Classes_and_types#Class_inheritance

Ten koncept rozsirovani chovani je o neco oddlenejsi od rozsirovani datovych struktur nez v Java/C++/Ruby.. style.

Polymorfismus muzes casto vyjadrit tak, ze proste mas vic funkci se stejnym typem a nekterou z nich mas nekam "prirazenou".
Viděl. Šlo mi o to, jak se klasifikují matematicky. Například monády jsou funktory (splňující nějaké podmínky navíc), tak jestli je nějaký čistě formální koncept, jehož reflexí je v praxi dědičnost. Bohužel ten matematický aparát nijak podrobně neznám.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Dědičnost funkcionálně
« Odpověď #3 kdy: 12. 07. 2018, 15:38:49 »
Šlo mi o to, jak se klasifikují matematicky. Například monády jsou funktory (splňující nějaké podmínky navíc), tak jestli je nějaký čistě formální koncept, jehož reflexí je v praxi dědičnost. Bohužel ten matematický aparát nijak podrobně neznám.
Množiny a podmnožiny?

Čísla -> Celá čísla -> Rozsah celých čísel.

Ale vlastní podtypovou dědičnost v Haskellu neumím. (Třídy jo, ale to je něco jiného.)

v

Re:Dědičnost funkcionálně
« Odpověď #4 kdy: 12. 07. 2018, 15:44:17 »
myslím, že tohle haskellu neexistuje, asi
(možná pomůže tahle klasika https://www.cs.cmu.edu/~wing/publications/LiskovWing94.pdf )


LambdaBender

Re:Dědičnost funkcionálně
« Odpověď #5 kdy: 12. 07. 2018, 16:44:37 »
Šlo mi o to, jak se klasifikují matematicky. Například monády jsou funktory (splňující nějaké podmínky navíc), tak jestli je nějaký čistě formální koncept, jehož reflexí je v praxi dědičnost. Bohužel ten matematický aparát nijak podrobně neznám.
Množiny a podmnožiny?
To právě ne, typy jsou formálně objekty Hasku, jež jsou nedělitelné. Proto se všechno vyjadřuje pomocí šipek, jen ty podtypy mi nějak unikají. Ještě zkouším stackoverflow, tak uvidíme.

mm

Re:Dědičnost funkcionálně
« Odpověď #6 kdy: 12. 07. 2018, 21:16:06 »
Set Theory a Cathegory Theory ... Haskell je vice mene o matematice, sice jedne z nejabstraktnejsich domen co existuje ale +- z 99% presne o nich.

Na jakoukoliv cast Haskellu jde najit vedeckou praci na ktere je zalozena

LambdaBender

Re:Dědičnost funkcionálně
« Odpověď #7 kdy: 12. 07. 2018, 23:09:46 »
Šlo mi o to, jak se klasifikují matematicky. Například monády jsou funktory (splňující nějaké podmínky navíc), tak jestli je nějaký čistě formální koncept, jehož reflexí je v praxi dědičnost. Bohužel ten matematický aparát nijak podrobně neznám.
Ale vlastní podtypovou dědičnost v Haskellu neumím
Haskell to asi nemá, ale v teorii by to mohl být klasifikátor podobjektů (teď jsem o tom našel článek Milewského). Ale nevím ještě přesně, tohle je pro mě nové.

harrison314

Re:Dědičnost funkcionálně
« Odpověď #8 kdy: 13. 07. 2018, 08:22:23 »
Haskell je cisto funkcionalny, tam by som rozhodne dedicnost netahal a ani o nej nerozmyslal (typove triedy su nieco ine).

LambdaBender

Re:Dědičnost funkcionálně
« Odpověď #9 kdy: 13. 07. 2018, 10:13:33 »
Haskell je cisto funkcionalny, tam by som rozhodne dedicnost netahal a ani o nej nerozmyslal (typove triedy su nieco ine).
Čistě funkcionální není, má kupříkladu závislostní typy. Proč by nemohl mít podtypy, když má všechny předpoklady (jednotkový typ, pravdivostní objekt)? Normálně by stačila syntaktická podpora pro klasifikátor podobjektů. Haskellisti sice někdy vymýšlejí šílené kraviny (viz derivace typů pro zippery), ale v tomto případě by byl dopad i praktický.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Dědičnost funkcionálně
« Odpověď #10 kdy: 13. 07. 2018, 13:08:52 »
Haskell je cisto funkcionalny, tam by som rozhodne dedicnost netahal a ani o nej nerozmyslal (typove triedy su nieco ine).
Čistě funkcionální není, má kupříkladu závislostní typy.
Můžeš ukázat jak závislostní typy poškodí referenční transparentnost?


Proč by nemohl mít podtypy, když má všechny předpoklady (jednotkový typ, pravdivostní objekt)? Normálně by stačila syntaktická podpora pro klasifikátor podobjektů. Haskellisti sice někdy vymýšlejí šílené kraviny (viz derivace typů pro zippery), ale v tomto případě by byl dopad i praktický.
Tak v OOP má dědičnost dopad vysloveně tragický. Třeba (třeba ne) by to mělo nějaké nešikovné důsledky.

LambdaBender

Re:Dědičnost funkcionálně
« Odpověď #11 kdy: 13. 07. 2018, 13:24:53 »
Haskell je cisto funkcionalny, tam by som rozhodne dedicnost netahal a ani o nej nerozmyslal (typove triedy su nieco ine).
Čistě funkcionální není, má kupříkladu závislostní typy.
Můžeš ukázat jak závislostní typy poškodí referenční transparentnost?
Nemůžu. Ani jsem to netvrdil.

LambdaBender

Re:Dědičnost funkcionálně
« Odpověď #12 kdy: 13. 07. 2018, 13:30:52 »
Proč by nemohl mít podtypy, když má všechny předpoklady (jednotkový typ, pravdivostní objekt)? Normálně by stačila syntaktická podpora pro klasifikátor podobjektů. Haskellisti sice někdy vymýšlejí šílené kraviny (viz derivace typů pro zippery), ale v tomto případě by byl dopad i praktický.
Tak v OOP má dědičnost dopad vysloveně tragický.
Ano, to je pravda. Viděno zpětně neměl jsem použít pojem dědičnost, jenže právě jak jsem psal, dost jsem tápal v té formální rovině, než jsem si našel texty o těch klasifikátorech. Správně by bylo hovořit o podtypech a jejich klasifikátorech. Dovedu si představit, jak by jejich podpora v syntaxi usnadnila implementaci a ušetřila psaní kódu. Ještě mě čeká dost rešerší a studia této problematiky, ale je-li zájem o diskusi, podívejme se na nějaké příklady.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Dědičnost funkcionálně
« Odpověď #13 kdy: 13. 07. 2018, 13:40:27 »
Haskell je cisto funkcionalny, tam by som rozhodne dedicnost netahal a ani o nej nerozmyslal (typove triedy su nieco ine).
Čistě funkcionální není, má kupříkladu závislostní typy.
Můžeš ukázat jak závislostní typy poškodí referenční transparentnost?
Nemůžu. Ani jsem to netvrdil.
Možná ti to nedošlo, ale pojem čistě funkcionální  == referenční transparentnost. Tak jak jsi to tedy myslel? Proč by neměl být Haskell čistě funkcionální?

Proč by nemohl mít podtypy, když má všechny předpoklady (jednotkový typ, pravdivostní objekt)? Normálně by stačila syntaktická podpora pro klasifikátor podobjektů. Haskellisti sice někdy vymýšlejí šílené kraviny (viz derivace typů pro zippery), ale v tomto případě by byl dopad i praktický.
Tak v OOP má dědičnost dopad vysloveně tragický.

ušetřila psaní kódu.
To zní děsivě povědomě!


ale je-li zájem o diskusi, podívejme se na nějaké příklady.
Za mě jo. Máš-li co, ukaž.

v

Re:Dědičnost funkcionálně
« Odpověď #14 kdy: 13. 07. 2018, 13:52:13 »
Haskell je cisto funkcionalny, tam by som rozhodne dedicnost netahal a ani o nej nerozmyslal (typove triedy su nieco ine).
Čistě funkcionální není, má kupříkladu závislostní typy.
Můžeš ukázat jak závislostní typy poškodí referenční transparentnost?
Nemůžu. Ani jsem to netvrdil.
Možná ti to nedošlo, ale pojem čistě funkcionální  == referenční transparentnost. Tak jak jsi to tedy myslel? Proč by neměl být Haskell čistě funkcionální?
tak flame o tom co je čistě funkcionální už tu dlouho nebyl, to je pravda :))