Rod v teorii typů ( anglicky kind [1] ) je typem konstruktoru typu nebo formálněji typem operátoru typu vyššího řádu . Genderový systém je přirozeně reprezentován jako nadřazený (nadřazený) jednoduše typovaný lambda kalkul , vybavený primitivním typem, označovaným " *" (čti " typ "), tvořící jakési monomorfní datové typy .
Ještě jasněji, rod je typ typů nebo metatyp – stejně jako množina hodnot tvoří typ , množina typů tvoří rod [2] . Výskyt typů v obecnějších typech (jako podtypy) se přitom liší od příslušnosti typů k rodu – k rozdělení různých typů do rodů dochází na abstraktnější úrovni. Například typy " natural ", " integer " a " real " jsou podtypy obecnějšího typu " number "; všechny čtyři typy představují bezprostřední hodnoty, a proto patří do rodu " *". Jiné rody jsou tvořeny z různých operací na typech , stejně jako aritmetika rozlišuje mezi čísly a operacemi s čísly .
Bylo by syntakticky přirozené uvažovat o všech polymorfních typech jako o typových konstruktérech ; a podle toho všechny monomorfní jsou konstruktory nulárního typu . Všechny nulové konstruktory, tedy všechny monomorfní typy, však ve skutečnosti patří do stejného rodu, totiž " *".
Protože operátory typu vyššího řádu jsou ve většině programovacích jazyků neobvyklé, v programovací praxi se k rozlišení datových typů od typů konstruktorů používaných k implementaci parametrického polymorfismu používají pohlaví . Pohlaví se objevují explicitně nebo implicitně v jazycích s kompletními typovými systémy , jako je Haskell a Scala [3] .
Haskell poskytuje polymorfní typy, ale neumožňuje polymorfní rody [5] . Například v této definici polymorfního algebraického typu
Strom dat z = List | Vidlice ( Strom z ) ( Strom z )zmůže být jakéhokoli pohlaví, včetně „ “, „ “ atd. Ve výchozím nastavení Haskell vždy odvozuje pohlaví „ “, pokud není uvedeno jinak (viz níže). Proto kontrola konzistence typu odmítne následující pokus o použití typu : Tree
type FunnyTree = Strom [] -- chybaprotože typ []je rodu " ", což není očekávaný rod pro , což je vždy " ". z
Operátoři typu vyššího řádu jsou však povoleni. Například,
data App unt z = Z ( unt z )patří do rodu „ “ , to znamená, že to musí být unární konstruktor , ale zde bere typ jako argument a vrací jiný typ. unt
Typy dat | |
---|---|
Neinterpretovatelné | |
Numerický | |
Text | |
Odkaz | |
Kompozitní | |
abstraktní | |
jiný | |
související témata |