Knowledge

Tagged union

Source đź“ť

1524: 575:. While universal data types are comparable to tagged unions in their formal definition, typical tagged unions include a relatively small number of cases, and these cases form different ways of expressing a single coherent concept, such as a data structure node or instruction. Also, there is an expectation that every possible case of a tagged union will be dealt with when it is used. The values of a universal data type are not related and there is no feasible way to deal with them all. 1371: 1130: 878: 1136: 913: 669: 1366:{\displaystyle {\text{join}}\colon ((A+E)+E)\to (A+E)=a\mapsto {\begin{cases}{\text{err}}\,e&{\mbox{if}}\ a={\text{err}}\,e\\{\text{err}}\,e&{\text{if}}\ a={\text{value}}\,{\text{(err}}\,e\,{\text{)}}\\{\text{value}}\,a'&{\text{if}}\ a={\text{value}}\,{\text{(value}}\,a'\,{\text{)}}\end{cases}}} 1434:
This is a tagged union with two cases: one, the leaf, is used to terminate a path of the tree, and functions much like a null value would in imperative languages. The other branch holds a node, which contains an integer and a left and right subtree. Leaf and Node are the constructors, which enable us
67:
field explicitly indicates which type is in use. It can be thought of as a type that has several "cases", each of which should be handled correctly when that type is manipulated. This is critical in defining recursive datatypes, in which some component of a value may have the same type as that value,
519:
The primary advantage of a tagged union over an untagged union is that all accesses are safe, and the compiler can even check that all cases are handled. Untagged unions depend on program logic to correctly identify the currently active field, which may result in strange behavior and hard-to-find
2452:
As long as the union fields are only accessed through the functions, the accesses will be safe and correct. The same approach can be used for encoded tags; we simply decode the tag and then check it on each access. If the inefficiency of these tag checks is a concern, they may be automatically
535:
The main disadvantage of tagged unions is that the tag occupies space. Since there are usually a small number of alternatives, the tag can often be squeezed into 2 or 3 bits wherever space can be found, but sometimes even these bits are not available. In this case, a helpful alternative may be
6513:. It can be extended by creating further subclasses of the same base type, which could not be handled correctly under a tag/dispatch model. Hence, it is usually not possible to do case analysis or dispatch on a subobject's 'tag' as one would for tagged unions. Some languages such as 1125:{\displaystyle {\text{fmap}}\colon (A\to B)\to \left(\left(A+E\right)\to \left(B+E\right)\right)=f\mapsto a\mapsto {\begin{cases}{\text{err}}\,e&{\text{if}}\ a={\text{err}}\,e\\{\text{value}}\,{\text{(}}\,f\,a'\,{\text{)}}&{\text{if}}\ a={\text{value}}\,a'\end{cases}}} 527:
containing a field for each type is that it saves storage by overlapping storage for all the types. Some implementations reserve enough storage for the largest type, while others dynamically adjust the size of a tagged union value as needed. When the value is
873:{\displaystyle {\text{bind}}\colon \left(A+E\right)\to \left(A\to \left(B+E\right)\right)\to \left(B+E\right)=a\mapsto f\mapsto {\begin{cases}{\text{err}}\,e&{\text{if}}\ a={\text{err}}\,e\\f\,a'&{\text{if}}\ a={\text{value}}\,a'\end{cases}}} 422: 663: 563:
Sometimes, untagged unions are used to perform bit-level conversions between types, called reinterpret casts in C++. Tagged unions are not intended for this purpose; typically a new value is assigned whenever the tag is changed.
2491:
Unfortunately, C compilers do not verify that the null case is always handled. This is a particularly common source of errors in C code, since there is a tendency to ignore exceptional cases.
571:, which is a type that includes every value of every other type, and often a way is provided to test the actual type of a value of the universal type. These are sometimes referred to as 442: 337: 312: 466:. It corresponds to a set of nullary constructors and may be implemented as a simple tag variable, since it holds no additional data besides the value of the tag. 120:, and are much safer than untagged unions, often simply called unions, which are similar but do not explicitly track which member of a union is currently in use. 1759:(from the 1990s) give a central role to tagged unions and have the power to check that all cases are handled. Some other languages also support tagged unions. 600: 590:, and their occurrence is not consistently checked: this is a fairly common source of programming errors. This use of tagged unions can be formalized as a 108:
can verify that all cases of a tagged union are always handled, avoiding many types of errors. Compile-time checked sum types are also extensively used in
135:. A constructor is a function or an expression that produces a value of the tagged union type, given a tag and a value of the corresponding type. 6498:
pointer in most C++ implementations) identifies the subclass and so effectively acts as a tag identifying the data stored by the instance (see
3929:
can be used to emulate pattern matching or to create syntactic sugar for declaring object variants, seen here as implemented by the package
63:
used to hold a value that could take on several different, but fixed, types. Only one of the types can be in use at any one time, and a
6859: 6503: 128: 504: 7230: 6864: 586:, tagged unions are sometimes used to handle the occurrence of exceptional results. Often these tags are folded into the type as 6854: 6849: 6837: 6738: 1523: 2151:, a tagged union can be created from untagged unions using a strict access discipline where the tag is always checked: 7015: 2525:
demonstrated it was possible to implement a safe tagged union as a library in C++, visitable using function objects.
1781:
in Ada), and require the tag field to be manually created and the tag values specified, as in this Pascal example:
548:, where the tag value is dynamically computed from the contents of the union field. Common examples are the use of 6988: 452: 76:, tagged unions can save storage by overlapping storage areas for each type, since only one is in use at a time. 3514:
Because the defined cases are exhaustive, the compiler can check that all cases are handled in a pattern match:
7105: 6910: 6842: 6804: 3360: 2500: 2457: 591: 482: 3007:
Because the class hierarchy is sealed, the compiler can check that all cases are handled in a pattern match:
1762: 6635: 7005: 6935: 6783: 6514: 5083: 2829: 2515: 132: 7260: 6895: 6487: 4625: 2507: 109: 6883: 3793: 1766: 1531:
Now we can easily write a typesafe function that, for example, counts the number of nodes in the tree:
7193: 7145: 7057: 7035: 7030: 6958: 6824: 6778: 1752: 524: 259: 89: 6649: 5932:
introduces support for typing annotations that can be used to define a tagged union type (PEP-593):
1207: 1014: 780: 552:, where, for example, a function returning a positive number may return -1 to indicate failure, and 7067: 6731: 6710: 3926: 2144: 7220: 7135: 210: 6607: 6963: 6819: 6773: 1748: 85: 6583: 4314:
Enums are added in Scala 3, allowing us to rewrite the earlier Scala examples more concisely:
417:{\displaystyle {\mathsf {case}}\ e\ {\mathsf {of}}\ x\Rightarrow e_{1}\mid y\Rightarrow e_{2}} 6953: 6928: 2522: 470: 69: 164:. If an element lies in both, there will be two effectively distinct copies of the value in 7286: 6755: 6510: 6495: 445: 427: 297: 117: 16:
Data structure used to hold a value that could take on several different, but fixed, types
8: 7281: 7225: 7203: 7130: 6983: 6975: 6724: 448: 124: 101: 6490:, each subclass can encapsulate data unique to that class. The metadata used to perform 2456:
C and C++ also have language support for one particular tagged union: the possibly-null
7208: 7188: 7140: 7115: 6900: 6869: 6706: 6535: 583: 192: 5056:
Rust's error handling model relies extensively on these tagged unions, especially the
658:{\displaystyle {\text{return}}\colon A\to \left(A+E\right)=a\mapsto {\text{value}}\,a} 7095: 7025: 7000: 6814: 6809: 6621: 6517:
allow base classes to be "sealed", and unify tagged unions with sealed base classes.
72:, where it is necessary to distinguish multi-node subtrees and leaves. Like ordinary 7240: 7125: 6923: 529: 255: 20: 7245: 7110: 7062: 6995: 6555: 6483: 895:
is the type of error conditions. Alternately, the same monad may be described by
501: 490: 478: 474: 459: 6569: 6015: 7198: 7020: 7010: 6918: 6700: 6491: 2469: 557: 553: 494: 140: 60: 45: 7275: 7120: 6526: 5086:
also has substantial support for tagged unions via enumerations. For example:
6673: 5929: 7052: 2480: 196: 3930: 7255: 7250: 7100: 7047: 6874: 6506:
sets this tag, and it remains constant throughout the object's lifetime.
1382: 579: 184: 7160: 7155: 7072: 7040: 6945: 6888: 5424: 1385:
of integers. In ML, we would do this by creating a datatype like this:
486: 73: 3796:
has object variants similar in declaration to those in Pascal and Ada:
7235: 7213: 7170: 7165: 6832: 6788: 6747: 463: 55: 4628:
has extensive support for tagged unions, called enums. For example:
7150: 1770: 1639: 568: 508: 105: 507:. The tag of the tagged union can be seen as the simplest kind of 6011: 1756: 93: 883:
where "value" and "err" are the constructors of the union type,
148:, usually written using +. Given an element of a disjoint union 532:, it is simple to allocate just as much storage as is needed. 6716: 6530: 2148: 6768: 6650:"Enumerations — The Swift Programming Language (Swift 5.4)" 6499: 3578: 2511: 1359: 1118: 866: 497:, are usually implemented using some sort of tagged union. 469:
Many programming techniques and data structures, including
5427:
it is also possible to create tagged unions. For example:
3095:
Scala's case classes also permit reuse through subtyping:
6763: 2138:-- discriminant is not the expected one, raises an error. 2132:-- Any attempt to access a member which existence depends 123:
Tagged unions are often accompanied by the concept of a
6674:"PEP 593 -- Flexible function and variable annotations" 1652:
construct is used to determine which field is tagged:
1222: 523:
The primary advantage of a tagged union over a simple
6477: 2472:: a tagged union (with an encoded tag) of two types: 1139: 916: 672: 603: 430: 340: 300: 2503:, has extensive built-in support for tagged unions. 2135:-- on a certain value of the discriminant, while the 462:
can be seen as a degenerate case: a tagged union of
156:, it is possible to determine whether it came from 500:A tagged union can be seen as the simplest kind of 1365: 1124: 872: 657: 436: 416: 306: 116:. They can, however, be constructed in nearly any 6570:"Using Enums - Haxe - The Cross-platform Toolkit" 7273: 3660:These can be matched using a switch expression: 1435:to actually produce a particular tree, such as: 254:The elimination form is case analysis, known as 68:for example in defining a type for representing 1628: 514: 6509:Nevertheless, a class hierarchy involves true 6732: 6430:// The !sizeof(T) expression is always false 138:Mathematically, tagged unions correspond to 6529:, the type tag for discriminated unions in 1527:The tree produced by the above constructors 199:. Notations vary, but usually the sum type 6739: 6725: 6608:"Scala 3 Language Reference: Enumerations" 2665:"It's a string, with value " 567:Many languages support, to some extent, a 1350: 1341: 1335: 1305: 1290: 1286: 1280: 1255: 1242: 1215: 1106: 1079: 1070: 1066: 1060: 1047: 1022: 854: 824: 813: 788: 651: 127:, which is similar but not the same as a 6709:is an implementation of variant type in 2593:"It's an int, with value " 7274: 2518:languages also work as tagged unions. 2487:, indicating an exceptional condition. 2468:type in Haskell, and can be seen as a 371: 368: 352: 349: 346: 343: 6720: 6703:is a C++ typesafe discriminated union 3776:"Color had a red value of " 3581:'s enums also work as tagged unions: 6472:std::visit(Transverser{}, forest);*/ 3573:"top level node is a leaf" 3555:"top level node value: %i" 3084:"top level node is a leaf" 1743: 84:Tagged unions are most important in 6454:"non-exhaustive visitor!" 4695:It also allows matching on unions: 209:comes with two introduction forms ( 13: 6494:lookup (for example, the object's 6478:Class hierarchies as tagged unions 3057:"top level node value: " 2499:One advanced dialect of C, called 1522: 14: 7298: 6694: 1520:which corresponds to this tree: 6622:"The Rust Programming Language" 1646:, the tag is implicit, and the 6746: 6666: 6642: 6628: 6614: 6600: 6576: 6562: 6548: 2460:. This may be compared to the 2453:removed in the final version. 1729:c): print(("compl:", c)), ( 1725:i): print(("int:", i)), ( 1721:r): print(("real:", r)), ( 1199: 1190: 1178: 1175: 1172: 1163: 1151: 1148: 1006: 1000: 967: 940: 937: 931: 925: 899:and two additional functions, 772: 766: 738: 711: 700: 643: 615: 594:with the following functions: 483:arbitrary-precision arithmetic 444:. The sum type corresponds to 401: 382: 79: 1: 6805:Arbitrary-precision or bignum 6541: 2521:The variant library from the 187:, a tagged union is called a 6014:introduces std::variant and 1733:s): print(("string:", s)) 1629:Timeline of language support 515:Advantages and disadvantages 334:respectively, then the term 7: 6520: 6488:object-oriented programming 3716:"Color was green" 1642:, tagged unions are called 1376: 891:are valid result types and 453:Curry–Howard correspondence 10: 7303: 3737:"Color was blue" 3363:has discriminated unions: 2483:type with only one value, 520:bugs if that logic fails. 7179: 7146:Strongly typed identifier 7088: 6974: 6944: 6909: 6797: 6754: 3695:"Color was red" 1953:and this Ada equivalent: 1709:n := "1234";   1381:Say we wanted to build a 6556:"Cyclone: Tagged Unions" 6019: 5934: 5429: 5088: 4697: 4630: 4316: 4309: 3935: 3798: 3662: 3583: 3516: 3365: 3097: 3009: 2834: 2527: 2494: 2153: 1955: 1783: 1633: 1533: 1437: 1387: 112:, where they are called 96:, where they are called 7221:Parametric polymorphism 2797:"hello world" 5072:type, which is either 5060:type, which is either 2506:The enum types in the 1749:Functional programming 1528: 1367: 1126: 874: 659: 438: 418: 314:under the assumptions 308: 86:functional programming 1755:(from the 1970s) and 1526: 1368: 1127: 875: 660: 556:, most often used in 493:, and other kinds of 439: 437:{\displaystyle \tau } 419: 309: 307:{\displaystyle \tau } 6511:subtype polymorphism 6469:/*Tree forest = ...; 1137: 914: 670: 601: 428: 338: 298: 191:. Sum types are the 146:discriminated unions 118:programming language 7226:Primitive data type 7131:Recursive data type 6984:Algebraic data type 6860:Quadruple precision 2523:Boost C++ Libraries 569:universal data type 449:logical disjunction 102:algebraic data type 41:discriminated union 7189:Abstract data type 6870:Extended precision 6829:Reduced precision 6572:. Haxe Foundation. 6536:Variant type (COM) 5955:'Currency' 5070:Result<T, E> 2832:has case classes: 2464:type in ML or the 1779:discriminated type 1751:languages such as 1686:Usage example for 1529: 1363: 1358: 1226: 1122: 1117: 870: 865: 655: 584:exception handling 434: 414: 304: 88:languages such as 7269: 7268: 7001:Associative array 6865:Octuple precision 6636:"Rust By Example" 6610:. The Scala Team. 5964:'dollars' 1744:1970s & 1980s 1737:print(("?:", n)) 1354: 1339: 1333: 1323: 1319: 1303: 1294: 1284: 1278: 1268: 1264: 1253: 1240: 1230: 1225: 1213: 1143: 1104: 1094: 1090: 1083: 1064: 1058: 1045: 1035: 1031: 1020: 920: 852: 842: 838: 811: 801: 797: 786: 676: 649: 607: 378: 365: 359: 7294: 7241:Type constructor 7126:Opaque data type 7058:Record or Struct 6855:Double precision 6850:Single precision 6741: 6734: 6727: 6718: 6717: 6688: 6687: 6685: 6684: 6670: 6664: 6663: 6661: 6660: 6646: 6640: 6639: 6632: 6626: 6625: 6618: 6612: 6611: 6604: 6598: 6597: 6595: 6594: 6580: 6574: 6573: 6566: 6560: 6559: 6552: 6473: 6470: 6467: 6464: 6461: 6458: 6455: 6452: 6449: 6446: 6443: 6440: 6437: 6434: 6431: 6428: 6425: 6422: 6419: 6416: 6413: 6410: 6407: 6404: 6401: 6398: 6395: 6392: 6389: 6386: 6383: 6380: 6377: 6374: 6371: 6368: 6365: 6362: 6359: 6356: 6353: 6350: 6347: 6344: 6341: 6338: 6335: 6332: 6329: 6326: 6323: 6320: 6317: 6314: 6311: 6308: 6305: 6302: 6299: 6296: 6293: 6290: 6287: 6284: 6281: 6278: 6275: 6272: 6269: 6266: 6263: 6260: 6257: 6254: 6251: 6248: 6245: 6242: 6239: 6236: 6233: 6230: 6227: 6224: 6221: 6218: 6215: 6212: 6209: 6206: 6203: 6200: 6197: 6194: 6191: 6188: 6185: 6182: 6179: 6176: 6173: 6170: 6167: 6164: 6161: 6158: 6155: 6152: 6149: 6146: 6143: 6140: 6137: 6134: 6131: 6128: 6125: 6122: 6119: 6116: 6113: 6110: 6107: 6104: 6101: 6098: 6095: 6092: 6089: 6086: 6083: 6080: 6077: 6074: 6071: 6068: 6065: 6062: 6059: 6056: 6053: 6050: 6047: 6044: 6041: 6038: 6035: 6032: 6029: 6026: 6023: 6007: 6004: 6001: 5998: 5995: 5992: 5989: 5986: 5983: 5980: 5977: 5976:'pounds' 5974: 5971: 5968: 5965: 5962: 5959: 5956: 5953: 5950: 5947: 5944: 5941: 5938: 5925: 5922: 5919: 5916: 5913: 5910: 5907: 5904: 5901: 5898: 5895: 5892: 5889: 5886: 5883: 5880: 5877: 5874: 5871: 5868: 5865: 5862: 5859: 5856: 5853: 5852:"node" 5850: 5847: 5844: 5841: 5840:"leaf" 5838: 5835: 5832: 5829: 5826: 5823: 5820: 5817: 5814: 5811: 5808: 5805: 5802: 5799: 5796: 5793: 5790: 5787: 5784: 5781: 5778: 5777:"leaf" 5775: 5772: 5769: 5766: 5763: 5760: 5757: 5756:"leaf" 5754: 5751: 5748: 5745: 5742: 5739: 5736: 5733: 5730: 5727: 5724: 5723:"node" 5721: 5718: 5715: 5712: 5709: 5706: 5703: 5702:"leaf" 5700: 5697: 5694: 5691: 5688: 5685: 5682: 5679: 5676: 5673: 5670: 5669:"node" 5667: 5664: 5661: 5658: 5655: 5652: 5649: 5646: 5645:"leaf" 5643: 5640: 5637: 5634: 5631: 5628: 5625: 5624:"leaf" 5622: 5619: 5616: 5613: 5610: 5607: 5604: 5601: 5598: 5595: 5592: 5591:"node" 5589: 5586: 5583: 5580: 5577: 5574: 5571: 5568: 5565: 5562: 5559: 5558:"node" 5556: 5553: 5550: 5547: 5544: 5541: 5538: 5535: 5532: 5529: 5526: 5523: 5520: 5517: 5514: 5511: 5508: 5505: 5502: 5499: 5496: 5493: 5490: 5487: 5484: 5481: 5478: 5475: 5472: 5471:"node" 5469: 5466: 5463: 5460: 5457: 5454: 5451: 5448: 5447:"leaf" 5445: 5442: 5439: 5436: 5433: 5419: 5416: 5413: 5410: 5407: 5404: 5401: 5398: 5395: 5392: 5389: 5386: 5383: 5380: 5377: 5374: 5371: 5368: 5365: 5362: 5359: 5356: 5353: 5350: 5347: 5344: 5341: 5338: 5335: 5332: 5329: 5326: 5323: 5320: 5317: 5314: 5311: 5308: 5305: 5302: 5299: 5296: 5293: 5290: 5287: 5284: 5281: 5278: 5275: 5272: 5269: 5266: 5263: 5260: 5257: 5254: 5251: 5248: 5245: 5242: 5239: 5236: 5233: 5230: 5227: 5224: 5221: 5218: 5215: 5212: 5209: 5206: 5203: 5200: 5197: 5194: 5191: 5188: 5185: 5182: 5179: 5176: 5173: 5170: 5167: 5164: 5161: 5158: 5155: 5152: 5149: 5146: 5143: 5140: 5137: 5134: 5131: 5128: 5125: 5122: 5119: 5116: 5113: 5110: 5107: 5104: 5101: 5098: 5095: 5092: 5079: 5075: 5071: 5067: 5063: 5059: 5052: 5049: 5046: 5043: 5040: 5037: 5034: 5031: 5028: 5025: 5022: 5019: 5016: 5012: 5009: 5006: 5003: 5000: 4997: 4994: 4991: 4988: 4985: 4982: 4979: 4976: 4973: 4970: 4967: 4964: 4961: 4958: 4955: 4952: 4949: 4946: 4942: 4939: 4936: 4933: 4930: 4927: 4923: 4920: 4916: 4913: 4910: 4907: 4904: 4901: 4898: 4894: 4891: 4888: 4884: 4881: 4878: 4874: 4871: 4868: 4864: 4861: 4858: 4855: 4852: 4848: 4845: 4842: 4838: 4835: 4832: 4828: 4825: 4822: 4818: 4815: 4812: 4809: 4806: 4802: 4799: 4796: 4792: 4789: 4786: 4782: 4779: 4776: 4772: 4769: 4766: 4762: 4759: 4756: 4752: 4749: 4746: 4743: 4740: 4736: 4733: 4730: 4726: 4723: 4720: 4717: 4714: 4710: 4707: 4704: 4701: 4691: 4688: 4685: 4682: 4679: 4676: 4673: 4670: 4667: 4664: 4661: 4658: 4655: 4652: 4649: 4646: 4643: 4640: 4637: 4634: 4620: 4617: 4614: 4611: 4608: 4605: 4602: 4599: 4596: 4593: 4590: 4587: 4584: 4581: 4578: 4575: 4572: 4569: 4566: 4563: 4560: 4557: 4554: 4551: 4548: 4545: 4542: 4539: 4536: 4533: 4530: 4527: 4524: 4521: 4518: 4515: 4512: 4509: 4506: 4503: 4500: 4497: 4494: 4491: 4488: 4485: 4482: 4479: 4476: 4473: 4470: 4467: 4464: 4461: 4458: 4455: 4452: 4449: 4446: 4443: 4440: 4437: 4434: 4431: 4428: 4425: 4422: 4419: 4416: 4413: 4410: 4407: 4404: 4401: 4398: 4395: 4392: 4389: 4386: 4383: 4380: 4377: 4374: 4371: 4368: 4365: 4362: 4359: 4356: 4353: 4350: 4347: 4344: 4341: 4338: 4335: 4332: 4329: 4326: 4323: 4320: 4305: 4302: 4299: 4296: 4293: 4290: 4287: 4284: 4281: 4278: 4275: 4272: 4269: 4266: 4263: 4260: 4257: 4254: 4251: 4248: 4245: 4242: 4239: 4236: 4233: 4230: 4227: 4224: 4221: 4218: 4215: 4212: 4209: 4206: 4203: 4200: 4197: 4194: 4191: 4188: 4185: 4182: 4179: 4176: 4173: 4170: 4167: 4164: 4161: 4158: 4155: 4152: 4149: 4146: 4143: 4140: 4137: 4134: 4131: 4128: 4125: 4122: 4119: 4116: 4113: 4110: 4107: 4104: 4101: 4098: 4095: 4092: 4089: 4086: 4083: 4080: 4077: 4074: 4071: 4068: 4065: 4062: 4059: 4056: 4053: 4050: 4047: 4044: 4041: 4038: 4035: 4032: 4029: 4026: 4023: 4020: 4017: 4014: 4011: 4008: 4005: 4002: 3999: 3996: 3993: 3990: 3987: 3984: 3981: 3978: 3975: 3972: 3969: 3966: 3963: 3960: 3957: 3954: 3951: 3948: 3945: 3942: 3939: 3922: 3919: 3916: 3913: 3910: 3907: 3904: 3901: 3898: 3895: 3892: 3889: 3886: 3883: 3880: 3877: 3874: 3871: 3868: 3865: 3862: 3859: 3856: 3853: 3850: 3847: 3844: 3841: 3838: 3835: 3832: 3829: 3826: 3823: 3820: 3817: 3814: 3811: 3808: 3805: 3802: 3789: 3786: 3783: 3780: 3777: 3774: 3771: 3768: 3765: 3762: 3759: 3756: 3753: 3750: 3747: 3744: 3741: 3738: 3735: 3732: 3729: 3726: 3723: 3720: 3717: 3714: 3711: 3708: 3705: 3702: 3699: 3696: 3693: 3690: 3687: 3684: 3681: 3678: 3675: 3672: 3669: 3666: 3656: 3653: 3650: 3647: 3644: 3641: 3638: 3635: 3632: 3629: 3626: 3623: 3620: 3617: 3614: 3611: 3608: 3605: 3602: 3599: 3596: 3593: 3590: 3587: 3574: 3571: 3568: 3565: 3562: 3559: 3556: 3553: 3550: 3547: 3544: 3541: 3538: 3535: 3532: 3529: 3526: 3523: 3520: 3510: 3507: 3504: 3501: 3498: 3495: 3492: 3489: 3486: 3483: 3480: 3477: 3474: 3471: 3468: 3465: 3462: 3459: 3456: 3453: 3450: 3447: 3444: 3441: 3438: 3435: 3432: 3429: 3426: 3423: 3420: 3417: 3414: 3411: 3408: 3405: 3402: 3399: 3396: 3393: 3390: 3387: 3384: 3381: 3378: 3375: 3372: 3369: 3356: 3353: 3350: 3347: 3344: 3341: 3338: 3335: 3332: 3329: 3326: 3323: 3320: 3317: 3314: 3311: 3308: 3305: 3302: 3299: 3296: 3293: 3290: 3287: 3284: 3281: 3278: 3275: 3272: 3269: 3266: 3263: 3260: 3257: 3254: 3251: 3248: 3245: 3242: 3239: 3236: 3233: 3230: 3227: 3224: 3221: 3218: 3215: 3212: 3209: 3206: 3203: 3200: 3197: 3194: 3191: 3188: 3185: 3182: 3179: 3176: 3173: 3170: 3167: 3164: 3161: 3158: 3155: 3152: 3149: 3146: 3143: 3140: 3137: 3134: 3131: 3128: 3125: 3122: 3119: 3116: 3113: 3110: 3107: 3104: 3101: 3091: 3088: 3085: 3082: 3079: 3076: 3073: 3070: 3067: 3064: 3061: 3058: 3055: 3052: 3049: 3046: 3043: 3040: 3037: 3034: 3031: 3028: 3025: 3022: 3019: 3016: 3013: 3003: 3000: 2997: 2994: 2991: 2988: 2985: 2982: 2979: 2976: 2973: 2970: 2967: 2964: 2961: 2958: 2955: 2952: 2949: 2946: 2943: 2940: 2937: 2934: 2931: 2928: 2925: 2922: 2919: 2916: 2913: 2910: 2907: 2904: 2901: 2898: 2895: 2892: 2889: 2886: 2883: 2880: 2877: 2874: 2871: 2868: 2865: 2862: 2859: 2856: 2853: 2850: 2847: 2844: 2841: 2838: 2825: 2822: 2819: 2816: 2813: 2810: 2807: 2804: 2801: 2798: 2795: 2792: 2789: 2786: 2783: 2780: 2777: 2774: 2771: 2768: 2765: 2762: 2759: 2756: 2753: 2750: 2747: 2744: 2741: 2738: 2735: 2732: 2729: 2726: 2723: 2720: 2717: 2714: 2711: 2708: 2705: 2702: 2699: 2696: 2693: 2690: 2687: 2684: 2681: 2678: 2675: 2672: 2669: 2666: 2663: 2660: 2657: 2654: 2651: 2648: 2645: 2642: 2639: 2636: 2633: 2630: 2627: 2624: 2621: 2618: 2615: 2612: 2609: 2606: 2603: 2600: 2597: 2594: 2591: 2588: 2585: 2582: 2579: 2576: 2573: 2570: 2567: 2564: 2561: 2558: 2555: 2552: 2549: 2546: 2543: 2540: 2537: 2534: 2531: 2486: 2467: 2463: 2448: 2445: 2442: 2439: 2436: 2433: 2430: 2427: 2424: 2421: 2418: 2415: 2412: 2409: 2406: 2403: 2400: 2397: 2394: 2391: 2388: 2385: 2382: 2379: 2376: 2373: 2370: 2367: 2364: 2361: 2358: 2355: 2352: 2349: 2346: 2343: 2340: 2337: 2334: 2331: 2328: 2325: 2322: 2319: 2316: 2313: 2310: 2307: 2304: 2301: 2298: 2295: 2292: 2289: 2286: 2283: 2280: 2277: 2274: 2271: 2268: 2265: 2262: 2259: 2256: 2253: 2250: 2247: 2244: 2241: 2238: 2235: 2232: 2229: 2226: 2223: 2220: 2217: 2214: 2211: 2208: 2205: 2202: 2199: 2196: 2193: 2190: 2187: 2184: 2181: 2178: 2175: 2172: 2169: 2166: 2163: 2160: 2157: 2139: 2136: 2133: 2130: 2127: 2124: 2121: 2118: 2115: 2112: 2109: 2106: 2103: 2100: 2097: 2094: 2091: 2088: 2085: 2082: 2079: 2076: 2073: 2070: 2067: 2064: 2061: 2058: 2055: 2052: 2049: 2046: 2043: 2040: 2037: 2034: 2031: 2028: 2025: 2022: 2019: 2016: 2013: 2010: 2007: 2004: 2001: 1998: 1995: 1992: 1989: 1986: 1983: 1980: 1977: 1974: 1971: 1968: 1965: 1962: 1959: 1949: 1946: 1943: 1940: 1937: 1934: 1931: 1928: 1925: 1922: 1919: 1916: 1913: 1910: 1907: 1904: 1901: 1898: 1895: 1892: 1889: 1886: 1883: 1880: 1877: 1874: 1871: 1868: 1865: 1862: 1859: 1856: 1853: 1850: 1847: 1844: 1841: 1838: 1835: 1832: 1829: 1826: 1823: 1820: 1817: 1814: 1811: 1808: 1805: 1802: 1799: 1796: 1793: 1790: 1787: 1702: 1696: 1691: 1683: 1651: 1624: 1621: 1618: 1615: 1612: 1609: 1606: 1603: 1600: 1597: 1594: 1591: 1588: 1585: 1582: 1579: 1576: 1573: 1570: 1567: 1564: 1561: 1558: 1555: 1552: 1549: 1546: 1543: 1540: 1537: 1516: 1513: 1510: 1507: 1504: 1501: 1498: 1495: 1492: 1489: 1486: 1483: 1480: 1477: 1474: 1471: 1468: 1465: 1462: 1459: 1456: 1453: 1450: 1447: 1444: 1441: 1430: 1427: 1424: 1421: 1418: 1415: 1412: 1409: 1406: 1403: 1400: 1397: 1394: 1391: 1372: 1370: 1369: 1364: 1362: 1361: 1355: 1352: 1349: 1340: 1337: 1334: 1331: 1321: 1320: 1317: 1313: 1304: 1301: 1295: 1292: 1285: 1282: 1279: 1276: 1266: 1265: 1262: 1254: 1251: 1241: 1238: 1228: 1227: 1223: 1214: 1211: 1144: 1141: 1131: 1129: 1128: 1123: 1121: 1120: 1114: 1105: 1102: 1092: 1091: 1088: 1084: 1081: 1078: 1065: 1062: 1059: 1056: 1046: 1043: 1033: 1032: 1029: 1021: 1018: 993: 989: 988: 984: 966: 962: 921: 918: 879: 877: 876: 871: 869: 868: 862: 853: 850: 840: 839: 836: 832: 812: 809: 799: 798: 795: 787: 784: 759: 755: 737: 733: 732: 728: 699: 695: 677: 674: 664: 662: 661: 656: 650: 647: 636: 632: 608: 605: 443: 441: 440: 435: 423: 421: 420: 415: 413: 412: 394: 393: 376: 375: 374: 363: 357: 356: 355: 333: 323: 313: 311: 310: 305: 293: 284: 275: 265: 256:pattern matching 253: 251: 231: 208: 27:, also called a 21:computer science 7302: 7301: 7297: 7296: 7295: 7293: 7292: 7291: 7272: 7271: 7270: 7265: 7246:Type conversion 7181: 7175: 7111:Enumerated type 7084: 6970: 6964:null-terminated 6940: 6905: 6793: 6750: 6745: 6697: 6692: 6691: 6682: 6680: 6672: 6671: 6667: 6658: 6656: 6648: 6647: 6643: 6634: 6633: 6629: 6620: 6619: 6615: 6606: 6605: 6601: 6592: 6590: 6582: 6581: 6577: 6568: 6567: 6563: 6554: 6553: 6549: 6544: 6523: 6502:). An object's 6484:class hierarchy 6480: 6475: 6474: 6471: 6468: 6465: 6462: 6459: 6456: 6453: 6450: 6447: 6444: 6441: 6438: 6435: 6432: 6429: 6426: 6423: 6420: 6417: 6414: 6411: 6408: 6405: 6402: 6399: 6396: 6393: 6390: 6387: 6384: 6381: 6378: 6375: 6372: 6369: 6366: 6363: 6360: 6357: 6354: 6351: 6348: 6345: 6342: 6339: 6336: 6333: 6330: 6327: 6324: 6321: 6318: 6315: 6312: 6309: 6306: 6303: 6300: 6297: 6294: 6291: 6288: 6285: 6282: 6279: 6276: 6273: 6270: 6267: 6264: 6261: 6258: 6255: 6252: 6249: 6246: 6243: 6240: 6237: 6234: 6231: 6228: 6225: 6222: 6219: 6216: 6213: 6210: 6207: 6204: 6201: 6198: 6195: 6192: 6189: 6186: 6183: 6180: 6177: 6174: 6171: 6168: 6165: 6162: 6159: 6156: 6153: 6150: 6147: 6144: 6141: 6138: 6135: 6132: 6129: 6126: 6123: 6120: 6117: 6114: 6111: 6108: 6105: 6102: 6099: 6096: 6093: 6090: 6087: 6084: 6081: 6078: 6075: 6072: 6069: 6066: 6063: 6060: 6057: 6054: 6051: 6048: 6045: 6042: 6039: 6036: 6033: 6030: 6027: 6024: 6021: 6009: 6008: 6005: 6002: 5999: 5996: 5993: 5990: 5987: 5984: 5981: 5978: 5975: 5972: 5969: 5966: 5963: 5960: 5957: 5954: 5951: 5948: 5945: 5942: 5939: 5936: 5927: 5926: 5923: 5920: 5917: 5914: 5911: 5908: 5905: 5902: 5899: 5896: 5893: 5890: 5887: 5884: 5881: 5878: 5875: 5872: 5869: 5866: 5863: 5860: 5857: 5854: 5851: 5848: 5845: 5842: 5839: 5836: 5833: 5830: 5827: 5824: 5821: 5818: 5815: 5812: 5809: 5806: 5803: 5800: 5797: 5794: 5791: 5788: 5785: 5782: 5779: 5776: 5773: 5770: 5767: 5764: 5761: 5758: 5755: 5752: 5749: 5746: 5743: 5740: 5737: 5734: 5731: 5728: 5725: 5722: 5719: 5716: 5713: 5710: 5707: 5704: 5701: 5698: 5695: 5692: 5689: 5686: 5683: 5680: 5677: 5674: 5671: 5668: 5665: 5662: 5659: 5656: 5653: 5650: 5647: 5644: 5641: 5638: 5635: 5632: 5629: 5626: 5623: 5620: 5617: 5614: 5611: 5608: 5605: 5602: 5599: 5596: 5593: 5590: 5587: 5584: 5581: 5578: 5575: 5572: 5569: 5566: 5563: 5560: 5557: 5554: 5551: 5548: 5545: 5542: 5539: 5536: 5533: 5530: 5527: 5524: 5521: 5518: 5515: 5512: 5509: 5506: 5503: 5500: 5497: 5494: 5491: 5488: 5485: 5482: 5479: 5476: 5473: 5470: 5467: 5464: 5461: 5458: 5455: 5452: 5449: 5446: 5443: 5440: 5437: 5434: 5431: 5421: 5420: 5417: 5414: 5411: 5408: 5405: 5402: 5399: 5396: 5393: 5390: 5387: 5384: 5381: 5378: 5375: 5372: 5369: 5366: 5363: 5360: 5357: 5354: 5351: 5348: 5345: 5342: 5339: 5336: 5333: 5330: 5327: 5324: 5321: 5318: 5315: 5312: 5309: 5306: 5303: 5300: 5297: 5294: 5291: 5288: 5285: 5282: 5279: 5276: 5273: 5270: 5267: 5264: 5261: 5258: 5255: 5252: 5249: 5246: 5243: 5240: 5237: 5234: 5231: 5228: 5225: 5222: 5219: 5216: 5213: 5210: 5207: 5204: 5201: 5198: 5195: 5192: 5189: 5186: 5183: 5180: 5177: 5174: 5171: 5168: 5165: 5162: 5159: 5156: 5153: 5150: 5147: 5144: 5141: 5138: 5135: 5132: 5129: 5126: 5123: 5120: 5117: 5114: 5111: 5108: 5105: 5102: 5099: 5096: 5093: 5090: 5077: 5073: 5069: 5065: 5061: 5058:Option<T> 5057: 5054: 5053: 5050: 5047: 5044: 5041: 5038: 5035: 5032: 5029: 5026: 5023: 5020: 5017: 5014: 5010: 5007: 5004: 5001: 4998: 4995: 4992: 4989: 4986: 4983: 4980: 4977: 4974: 4971: 4968: 4965: 4962: 4959: 4956: 4953: 4950: 4947: 4944: 4940: 4937: 4934: 4931: 4928: 4925: 4921: 4918: 4914: 4911: 4908: 4905: 4902: 4899: 4896: 4892: 4889: 4886: 4882: 4879: 4876: 4872: 4869: 4866: 4862: 4859: 4856: 4853: 4850: 4846: 4843: 4840: 4836: 4833: 4830: 4826: 4823: 4820: 4816: 4813: 4810: 4807: 4804: 4800: 4797: 4794: 4790: 4787: 4784: 4780: 4777: 4774: 4770: 4767: 4764: 4760: 4757: 4754: 4750: 4747: 4744: 4741: 4738: 4734: 4731: 4728: 4724: 4721: 4718: 4715: 4712: 4708: 4705: 4702: 4699: 4693: 4692: 4689: 4686: 4683: 4680: 4677: 4674: 4671: 4668: 4665: 4662: 4659: 4656: 4653: 4650: 4647: 4644: 4641: 4638: 4635: 4632: 4622: 4621: 4618: 4615: 4612: 4609: 4606: 4603: 4600: 4597: 4594: 4591: 4588: 4585: 4582: 4579: 4576: 4573: 4570: 4567: 4564: 4561: 4558: 4555: 4552: 4549: 4546: 4543: 4540: 4537: 4534: 4531: 4528: 4525: 4522: 4519: 4516: 4513: 4510: 4507: 4504: 4501: 4498: 4495: 4492: 4489: 4486: 4483: 4480: 4477: 4474: 4471: 4468: 4465: 4462: 4459: 4456: 4453: 4450: 4447: 4444: 4441: 4438: 4435: 4432: 4429: 4426: 4423: 4420: 4417: 4414: 4411: 4408: 4405: 4402: 4399: 4396: 4393: 4390: 4387: 4384: 4381: 4378: 4375: 4372: 4369: 4366: 4363: 4360: 4357: 4354: 4351: 4348: 4345: 4342: 4339: 4336: 4333: 4330: 4327: 4324: 4321: 4318: 4312: 4307: 4306: 4303: 4300: 4297: 4294: 4291: 4288: 4285: 4282: 4279: 4276: 4273: 4270: 4267: 4264: 4261: 4258: 4255: 4252: 4249: 4246: 4243: 4240: 4237: 4234: 4231: 4228: 4225: 4222: 4219: 4216: 4213: 4210: 4207: 4204: 4201: 4198: 4195: 4192: 4189: 4186: 4183: 4180: 4177: 4174: 4171: 4168: 4165: 4162: 4159: 4156: 4153: 4150: 4147: 4144: 4141: 4138: 4135: 4132: 4129: 4126: 4123: 4120: 4117: 4114: 4111: 4108: 4105: 4102: 4099: 4096: 4093: 4090: 4087: 4084: 4081: 4078: 4075: 4072: 4069: 4066: 4063: 4060: 4057: 4054: 4051: 4048: 4045: 4042: 4039: 4036: 4033: 4030: 4027: 4024: 4021: 4018: 4015: 4012: 4009: 4006: 4003: 4000: 3997: 3994: 3991: 3988: 3985: 3982: 3979: 3976: 3973: 3970: 3967: 3964: 3961: 3958: 3955: 3952: 3949: 3946: 3943: 3940: 3937: 3924: 3923: 3920: 3917: 3914: 3911: 3908: 3905: 3902: 3899: 3896: 3893: 3890: 3887: 3884: 3881: 3878: 3875: 3872: 3869: 3866: 3863: 3860: 3857: 3854: 3851: 3848: 3845: 3842: 3839: 3836: 3833: 3830: 3827: 3824: 3821: 3818: 3815: 3812: 3809: 3806: 3803: 3800: 3791: 3790: 3787: 3784: 3781: 3778: 3775: 3772: 3769: 3766: 3763: 3760: 3757: 3754: 3751: 3748: 3745: 3742: 3739: 3736: 3733: 3730: 3727: 3724: 3721: 3718: 3715: 3712: 3709: 3706: 3703: 3700: 3697: 3694: 3691: 3688: 3685: 3682: 3679: 3676: 3673: 3670: 3667: 3664: 3658: 3657: 3654: 3651: 3648: 3645: 3642: 3639: 3636: 3633: 3630: 3627: 3624: 3621: 3618: 3615: 3612: 3609: 3606: 3603: 3600: 3597: 3594: 3591: 3588: 3585: 3576: 3575: 3572: 3569: 3566: 3563: 3560: 3557: 3554: 3551: 3548: 3545: 3542: 3539: 3536: 3533: 3530: 3527: 3524: 3521: 3518: 3512: 3511: 3508: 3505: 3502: 3499: 3496: 3493: 3490: 3487: 3484: 3481: 3478: 3475: 3472: 3469: 3466: 3463: 3460: 3457: 3454: 3451: 3448: 3445: 3442: 3439: 3436: 3433: 3430: 3427: 3424: 3421: 3418: 3415: 3412: 3409: 3406: 3403: 3400: 3397: 3394: 3391: 3388: 3385: 3382: 3379: 3376: 3373: 3370: 3367: 3358: 3357: 3354: 3351: 3348: 3345: 3342: 3339: 3336: 3333: 3330: 3327: 3324: 3321: 3318: 3315: 3312: 3309: 3306: 3303: 3300: 3297: 3294: 3291: 3288: 3285: 3282: 3279: 3276: 3273: 3270: 3267: 3264: 3261: 3258: 3255: 3252: 3249: 3246: 3243: 3240: 3237: 3234: 3231: 3228: 3225: 3222: 3219: 3216: 3213: 3210: 3207: 3204: 3201: 3198: 3195: 3192: 3189: 3186: 3183: 3180: 3177: 3174: 3171: 3168: 3165: 3162: 3159: 3156: 3153: 3150: 3147: 3144: 3141: 3138: 3135: 3132: 3129: 3126: 3123: 3120: 3117: 3114: 3111: 3108: 3105: 3102: 3099: 3093: 3092: 3089: 3086: 3083: 3080: 3077: 3074: 3071: 3068: 3065: 3062: 3059: 3056: 3053: 3050: 3047: 3044: 3041: 3038: 3035: 3032: 3029: 3026: 3023: 3020: 3017: 3014: 3011: 3005: 3004: 3001: 2998: 2995: 2992: 2989: 2986: 2983: 2980: 2977: 2974: 2971: 2968: 2965: 2962: 2959: 2956: 2953: 2950: 2947: 2944: 2941: 2938: 2935: 2932: 2929: 2926: 2923: 2920: 2917: 2914: 2911: 2908: 2905: 2902: 2899: 2896: 2893: 2890: 2887: 2884: 2881: 2878: 2875: 2872: 2869: 2866: 2863: 2860: 2857: 2854: 2851: 2848: 2845: 2842: 2839: 2836: 2827: 2826: 2823: 2820: 2817: 2814: 2811: 2808: 2805: 2802: 2799: 2796: 2793: 2790: 2787: 2784: 2781: 2778: 2775: 2772: 2769: 2766: 2763: 2760: 2757: 2754: 2751: 2748: 2745: 2742: 2739: 2736: 2733: 2730: 2727: 2724: 2721: 2718: 2715: 2712: 2709: 2706: 2703: 2700: 2697: 2694: 2691: 2688: 2685: 2682: 2679: 2676: 2673: 2670: 2667: 2664: 2661: 2658: 2655: 2652: 2649: 2646: 2643: 2640: 2637: 2634: 2631: 2628: 2625: 2622: 2619: 2616: 2613: 2610: 2607: 2604: 2601: 2598: 2595: 2592: 2589: 2586: 2583: 2580: 2577: 2574: 2571: 2568: 2565: 2562: 2559: 2556: 2553: 2550: 2547: 2544: 2541: 2538: 2535: 2532: 2529: 2497: 2484: 2476:Valid pointers, 2465: 2461: 2450: 2449: 2447:/* and so on */ 2446: 2443: 2440: 2437: 2434: 2431: 2428: 2425: 2422: 2419: 2416: 2413: 2410: 2407: 2404: 2401: 2398: 2395: 2392: 2389: 2386: 2383: 2380: 2377: 2374: 2371: 2368: 2365: 2362: 2359: 2356: 2353: 2350: 2347: 2344: 2341: 2338: 2335: 2332: 2329: 2326: 2323: 2320: 2317: 2314: 2311: 2308: 2305: 2302: 2299: 2296: 2293: 2290: 2287: 2284: 2281: 2278: 2275: 2273:/* Rectangle */ 2272: 2269: 2266: 2263: 2260: 2257: 2254: 2251: 2248: 2245: 2242: 2239: 2236: 2233: 2230: 2227: 2224: 2221: 2218: 2215: 2212: 2209: 2206: 2203: 2200: 2197: 2194: 2191: 2188: 2185: 2182: 2179: 2176: 2173: 2170: 2167: 2164: 2161: 2158: 2155: 2141: 2140: 2137: 2134: 2131: 2128: 2125: 2122: 2119: 2116: 2113: 2110: 2107: 2104: 2101: 2098: 2095: 2092: 2089: 2086: 2083: 2080: 2077: 2074: 2071: 2068: 2065: 2062: 2059: 2056: 2053: 2050: 2047: 2044: 2041: 2038: 2035: 2032: 2029: 2026: 2023: 2020: 2017: 2014: 2011: 2008: 2005: 2002: 1999: 1996: 1993: 1990: 1987: 1984: 1981: 1978: 1975: 1972: 1969: 1966: 1963: 1960: 1957: 1951: 1950: 1947: 1944: 1941: 1938: 1935: 1932: 1929: 1926: 1923: 1920: 1917: 1914: 1911: 1908: 1905: 1902: 1899: 1896: 1893: 1890: 1887: 1884: 1881: 1878: 1875: 1872: 1869: 1866: 1863: 1860: 1857: 1854: 1851: 1848: 1845: 1842: 1839: 1836: 1833: 1830: 1827: 1824: 1821: 1818: 1815: 1812: 1809: 1806: 1803: 1800: 1797: 1794: 1791: 1788: 1785: 1775:variant records 1746: 1741: 1698: 1692: 1687: 1655: 1647: 1636: 1631: 1626: 1625: 1622: 1619: 1616: 1613: 1610: 1607: 1604: 1601: 1598: 1595: 1592: 1589: 1586: 1583: 1580: 1577: 1574: 1571: 1568: 1565: 1562: 1559: 1556: 1553: 1550: 1547: 1544: 1541: 1538: 1535: 1518: 1517: 1514: 1511: 1508: 1505: 1502: 1499: 1496: 1493: 1490: 1487: 1484: 1481: 1478: 1475: 1472: 1469: 1466: 1463: 1460: 1457: 1454: 1451: 1448: 1445: 1442: 1439: 1432: 1431: 1428: 1425: 1422: 1419: 1416: 1413: 1410: 1407: 1404: 1401: 1398: 1395: 1392: 1389: 1379: 1357: 1356: 1351: 1342: 1336: 1330: 1316: 1314: 1306: 1300: 1297: 1296: 1291: 1281: 1275: 1261: 1259: 1250: 1247: 1246: 1237: 1221: 1219: 1210: 1203: 1202: 1140: 1138: 1135: 1134: 1116: 1115: 1107: 1101: 1087: 1085: 1080: 1071: 1061: 1055: 1052: 1051: 1042: 1028: 1026: 1017: 1010: 1009: 974: 970: 952: 948: 947: 943: 917: 915: 912: 911: 864: 863: 855: 849: 835: 833: 825: 818: 817: 808: 794: 792: 783: 776: 775: 745: 741: 718: 714: 707: 703: 685: 681: 673: 671: 668: 667: 646: 622: 618: 604: 602: 599: 598: 588:reserved values 558:tagged pointers 554:sentinel values 550:reserved values 517: 502:self-describing 495:tagged pointers 491:indirection bit 479:class hierarchy 475:lazy evaluation 460:enumerated type 429: 426: 425: 408: 404: 389: 385: 367: 366: 342: 341: 339: 336: 335: 325: 315: 299: 296: 295: 292: 286: 283: 277: 267: 263: 238: 234: 233: 218: 214: 200: 82: 17: 12: 11: 5: 7300: 7290: 7289: 7284: 7267: 7266: 7264: 7263: 7258: 7253: 7248: 7243: 7238: 7233: 7228: 7223: 7218: 7217: 7216: 7206: 7201: 7199:Data structure 7196: 7191: 7185: 7183: 7177: 7176: 7174: 7173: 7168: 7163: 7158: 7153: 7148: 7143: 7138: 7133: 7128: 7123: 7118: 7113: 7108: 7103: 7098: 7092: 7090: 7086: 7085: 7083: 7082: 7081: 7080: 7070: 7065: 7060: 7055: 7050: 7045: 7044: 7043: 7033: 7028: 7023: 7018: 7013: 7008: 7003: 6998: 6993: 6992: 6991: 6980: 6978: 6972: 6971: 6969: 6968: 6967: 6966: 6956: 6950: 6948: 6942: 6941: 6939: 6938: 6933: 6932: 6931: 6926: 6915: 6913: 6907: 6906: 6904: 6903: 6898: 6893: 6892: 6891: 6881: 6880: 6879: 6878: 6877: 6867: 6862: 6857: 6852: 6847: 6846: 6845: 6840: 6838:Half precision 6835: 6825:Floating point 6822: 6817: 6812: 6807: 6801: 6799: 6795: 6794: 6792: 6791: 6786: 6781: 6776: 6771: 6766: 6760: 6758: 6752: 6751: 6744: 6743: 6736: 6729: 6721: 6715: 6714: 6704: 6701:boost::variant 6696: 6695:External links 6693: 6690: 6689: 6665: 6654:docs.swift.org 6641: 6627: 6613: 6599: 6575: 6561: 6546: 6545: 6543: 6540: 6539: 6538: 6533: 6522: 6519: 6492:virtual method 6479: 6476: 6020: 5935: 5430: 5089: 4698: 4631: 4317: 4311: 4308: 3936: 3799: 3663: 3584: 3517: 3366: 3098: 3010: 2835: 2545:static_visitor 2528: 2496: 2493: 2489: 2488: 2477: 2470:tagged pointer 2154: 1956: 1784: 1745: 1742: 1705: 1635: 1632: 1630: 1627: 1534: 1438: 1388: 1378: 1375: 1374: 1373: 1360: 1348: 1345: 1329: 1326: 1315: 1312: 1309: 1299: 1298: 1289: 1274: 1271: 1260: 1258: 1249: 1248: 1245: 1236: 1233: 1220: 1218: 1209: 1208: 1206: 1201: 1198: 1195: 1192: 1189: 1186: 1183: 1180: 1177: 1174: 1171: 1168: 1165: 1162: 1159: 1156: 1153: 1150: 1147: 1132: 1119: 1113: 1110: 1100: 1097: 1086: 1077: 1074: 1069: 1054: 1053: 1050: 1041: 1038: 1027: 1025: 1016: 1015: 1013: 1008: 1005: 1002: 999: 996: 992: 987: 983: 980: 977: 973: 969: 965: 961: 958: 955: 951: 946: 942: 939: 936: 933: 930: 927: 924: 881: 880: 867: 861: 858: 848: 845: 834: 831: 828: 823: 820: 819: 816: 807: 804: 793: 791: 782: 781: 779: 774: 771: 768: 765: 762: 758: 754: 751: 748: 744: 740: 736: 731: 727: 724: 721: 717: 713: 710: 706: 702: 698: 694: 691: 688: 684: 680: 665: 654: 645: 642: 639: 635: 631: 628: 625: 621: 617: 614: 611: 516: 513: 446:intuitionistic 433: 411: 407: 403: 400: 397: 392: 388: 384: 381: 373: 370: 362: 354: 351: 348: 345: 303: 290: 281: 262:languages: if 236: 216: 81: 78: 61:data structure 46:disjoint union 33:variant record 15: 9: 6: 4: 3: 2: 7299: 7288: 7285: 7283: 7280: 7279: 7277: 7262: 7259: 7257: 7254: 7252: 7249: 7247: 7244: 7242: 7239: 7237: 7234: 7232: 7229: 7227: 7224: 7222: 7219: 7215: 7212: 7211: 7210: 7207: 7205: 7202: 7200: 7197: 7195: 7192: 7190: 7187: 7186: 7184: 7178: 7172: 7169: 7167: 7164: 7162: 7159: 7157: 7154: 7152: 7149: 7147: 7144: 7142: 7139: 7137: 7134: 7132: 7129: 7127: 7124: 7122: 7121:Function type 7119: 7117: 7114: 7112: 7109: 7107: 7104: 7102: 7099: 7097: 7094: 7093: 7091: 7087: 7079: 7076: 7075: 7074: 7071: 7069: 7066: 7064: 7061: 7059: 7056: 7054: 7051: 7049: 7046: 7042: 7039: 7038: 7037: 7034: 7032: 7029: 7027: 7024: 7022: 7019: 7017: 7014: 7012: 7009: 7007: 7004: 7002: 6999: 6997: 6994: 6990: 6987: 6986: 6985: 6982: 6981: 6979: 6977: 6973: 6965: 6962: 6961: 6960: 6957: 6955: 6952: 6951: 6949: 6947: 6943: 6937: 6934: 6930: 6927: 6925: 6922: 6921: 6920: 6917: 6916: 6914: 6912: 6908: 6902: 6899: 6897: 6894: 6890: 6887: 6886: 6885: 6882: 6876: 6873: 6872: 6871: 6868: 6866: 6863: 6861: 6858: 6856: 6853: 6851: 6848: 6844: 6841: 6839: 6836: 6834: 6831: 6830: 6828: 6827: 6826: 6823: 6821: 6818: 6816: 6813: 6811: 6808: 6806: 6803: 6802: 6800: 6796: 6790: 6787: 6785: 6782: 6780: 6777: 6775: 6772: 6770: 6767: 6765: 6762: 6761: 6759: 6757: 6756:Uninterpreted 6753: 6749: 6742: 6737: 6735: 6730: 6728: 6723: 6722: 6719: 6712: 6708: 6705: 6702: 6699: 6698: 6679: 6675: 6669: 6655: 6651: 6645: 6637: 6631: 6623: 6617: 6609: 6603: 6589: 6585: 6579: 6571: 6565: 6557: 6551: 6547: 6537: 6534: 6532: 6528: 6527:Discriminator 6525: 6524: 6518: 6516: 6512: 6507: 6505: 6501: 6497: 6493: 6489: 6485: 6482:In a typical 6433:static_assert 6018: 6017: 6013: 5933: 5931: 5428: 5426: 5087: 5085: 5081: 4696: 4629: 4627: 4626:Rust language 4315: 3934: 3932: 3928: 3797: 3795: 3661: 3582: 3580: 3515: 3364: 3362: 3096: 3008: 2833: 2831: 2809:apply_visitor 2743:apply_visitor 2526: 2524: 2519: 2517: 2513: 2509: 2504: 2502: 2492: 2482: 2478: 2475: 2474: 2473: 2471: 2459: 2454: 2375:setSquareSide 2306:getSquareSide 2152: 2150: 2146: 1954: 1782: 1780: 1776: 1772: 1768: 1764: 1760: 1758: 1754: 1750: 1740: 1736: 1732: 1728: 1724: 1720: 1716: 1712: 1708: 1704: 1701: 1695: 1690: 1684: 1681: 1677: 1673: 1669: 1665: 1661: 1658: 1653: 1650: 1645: 1641: 1532: 1525: 1521: 1436: 1386: 1384: 1346: 1343: 1327: 1324: 1310: 1307: 1287: 1272: 1269: 1256: 1243: 1234: 1231: 1216: 1204: 1196: 1193: 1187: 1184: 1181: 1169: 1166: 1160: 1157: 1154: 1145: 1133: 1111: 1108: 1098: 1095: 1075: 1072: 1067: 1048: 1039: 1036: 1023: 1011: 1003: 997: 994: 990: 985: 981: 978: 975: 971: 963: 959: 956: 953: 949: 944: 934: 928: 922: 910: 909: 908: 906: 902: 898: 894: 890: 886: 859: 856: 846: 843: 829: 826: 821: 814: 805: 802: 789: 777: 769: 763: 760: 756: 752: 749: 746: 742: 734: 729: 725: 722: 719: 715: 708: 704: 696: 692: 689: 686: 682: 678: 666: 652: 640: 637: 633: 629: 626: 623: 619: 612: 609: 597: 596: 595: 593: 589: 585: 581: 576: 574: 570: 565: 561: 559: 555: 551: 547: 543: 539: 533: 531: 526: 521: 512: 510: 506: 503: 498: 496: 492: 488: 484: 481:(see below), 480: 476: 472: 467: 465: 461: 456: 454: 450: 447: 431: 409: 405: 398: 395: 390: 386: 379: 360: 332: 328: 322: 318: 301: 289: 280: 274: 270: 261: 257: 250: 246: 242: 230: 226: 222: 212: 207: 203: 198: 197:product types 194: 190: 186: 181: 179: 176:and one from 175: 171: 167: 163: 159: 155: 151: 147: 143: 142: 136: 134: 130: 126: 121: 119: 115: 111: 107: 103: 99: 95: 91: 87: 77: 75: 71: 66: 62: 58: 57: 52: 48: 47: 42: 38: 34: 30: 26: 22: 7077: 7026:Intersection 6681:. Retrieved 6677: 6668: 6657:. Retrieved 6653: 6644: 6630: 6616: 6602: 6591:. Retrieved 6588:nim-lang.org 6587: 6584:"Nim Manual" 6578: 6564: 6550: 6508: 6481: 6016:constexpr if 6010: 5928: 5422: 5082: 5055: 4694: 4623: 4313: 3925: 3792: 3659: 3577: 3513: 3359: 3094: 3006: 2828: 2520: 2505: 2498: 2490: 2481:null pointer 2455: 2451: 2294:/* Circle */ 2246:/* Square */ 2142: 1952: 1778: 1774: 1761: 1747: 1738: 1734: 1730: 1726: 1722: 1718: 1714: 1710: 1706: 1699: 1693: 1688: 1685: 1679: 1675: 1671: 1667: 1663: 1659: 1656: 1654: 1648: 1644:united modes 1643: 1637: 1530: 1519: 1433: 1380: 904: 900: 896: 892: 888: 884: 882: 587: 580:option types 577: 572: 566: 562: 549: 546:encoded tags 545: 541: 537: 534: 522: 518: 499: 468: 457: 330: 326: 320: 316: 287: 278: 272: 268: 248: 244: 240: 228: 224: 220: 205: 201: 188: 182: 177: 173: 169: 165: 161: 157: 153: 149: 145: 139: 137: 122: 113: 97: 83: 64: 54: 50: 44: 40: 36: 32: 28: 25:tagged union 24: 18: 7287:Type theory 7256:Type theory 7251:Type system 7101:Bottom type 7048:Option type 6989:generalized 6875:Long double 6820:Fixed point 6707:std.variant 6504:constructor 6400:Transverser 6343:Transverser 6142:Transverser 6000:TaggedUnion 3885:skRectangle 3819:skRectangle 1383:binary tree 505:data format 185:type theory 172:, one from 129:constructor 125:constructor 80:Description 37:choice type 7282:Data types 7276:Categories 7161:Empty type 7156:Type class 7106:Collection 7063:Refinement 7041:metaobject 6889:signedness 6748:Data types 6683:2021-06-20 6678:Python.org 6659:2021-04-28 6638:. Mozilla. 6624:. Mozilla. 6593:2020-01-23 6542:References 6175:&& 5930:Python 3.9 5425:TypeScript 5400:add_values 5358:add_values 5343:add_values 5262:add_values 5068:, and the 5036:add_values 5030:assert_eq! 4996:add_values 4978:add_values 4909:add_values 4154:listHelper 4115:listHelper 4043:listHelper 2126:end record 2003:Shape_Kind 1961:Shape_Kind 1777:(formally 1773:call them 1614:countNodes 1599:countNodes 1560:countNodes 1539:countNodes 487:CDR coding 464:unit types 451:under the 294:have type 211:injections 104:) and the 7236:Subtyping 7231:Interface 7214:metaclass 7166:Unit type 7136:Semaphore 7116:Exception 7021:Inductive 7011:Dependent 6976:Composite 6954:Character 6936:Reference 6833:Minifloat 6789:Bit array 6298:&> 6283:is_same_v 6271:constexpr 6217:&> 6202:is_same_v 6190:constexpr 5949:TypedDict 5943:Annotated 5456:interface 5432:interface 4481:Rectangle 3861:ShapeKind 3804:ShapeKind 3214:Rectangle 2213:ShapeKind 2171:Rectangle 2159:ShapeKind 2072:Rectangle 1976:Rectangle 1891:rectangle 1861:shapeKind 1804:rectangle 1789:shapeKind 1200:↦ 1176:→ 1146:: 1007:↦ 1001:↦ 968:→ 941:→ 932:→ 923:: 773:↦ 767:↦ 739:→ 712:→ 701:→ 679:: 644:↦ 616:→ 610:: 530:immutable 432:τ 424:has type 402:⇒ 396:∣ 383:⇒ 302:τ 266:has type 98:datatypes 56:coproduct 7261:Variable 7151:Top type 7016:Equality 6924:physical 6901:Rational 6896:Interval 6843:bfloat16 6521:See also 6247:<< 6235:<< 6166:operator 6154:typename 6148:template 5937:Currency 5792:function 5106:indirect 3909:skCircle 3867:skSquare 3825:skCircle 3813:skSquare 3103:abstract 2840:abstract 2674:<< 2668:<< 2662:<< 2623:operator 2602:<< 2596:<< 2590:<< 2563:operator 2027:Center_Y 2015:Center_X 1771:Modula-2 1640:ALGOL 68 1390:datatype 1377:Examples 1347:′ 1311:′ 1112:′ 1076:′ 860:′ 830:′ 573:variants 542:computed 509:metadata 260:ML-style 189:sum type 141:disjoint 106:compiler 51:sum type 7204:Generic 7180:Related 7096:Boolean 7053:Product 6929:virtual 6919:Address 6911:Pointer 6884:Integer 6815:Decimal 6810:Complex 6798:Numeric 6382:nullptr 6325:nullptr 6130:nullptr 6112:nullptr 6037:variant 5858:console 5066:Some(T) 4616:centerY 4610:centerX 4601:extends 4589:centerY 4577:centerX 4550:centerY 4544:centerX 4535:extends 4523:centerY 4511:centerX 4472:centerX 4466:centerY 4457:extends 4445:centerY 4433:centerX 4400:centerY 4388:centerX 4142:varargs 3995:variant 3843:centerY 3837:centerX 3570:printfn 3552:printfn 3352:centerY 3346:centerX 3337:extends 3325:centerY 3313:centerX 3283:centerY 3277:centerX 3268:extends 3256:centerY 3244:centerX 3202:centerY 3196:centerX 3187:extends 3175:centerY 3163:centerX 3127:centerY 3115:centerX 3078:println 3051:println 2912:extends 2858:extends 2815:display 2767:variant 2749:display 2701:variant 2533:display 2501:Cyclone 2458:pointer 2204:centery 2195:centerx 2111:Integer 2090:Integer 2063:Integer 2033:Integer 2021:Integer 1936:integer 1912:integer 1882:integer 1846:integer 1840:centery 1834:integer 1828:centerx 1757:Haskell 94:Haskell 59:, is a 29:variant 7194:Boxing 7182:topics 7141:Stream 7078:tagged 7036:Object 6959:String 6496:vtable 6442:sizeof 6256:" 6250:" 6139:struct 6091:struct 6079:string 6064:struct 6052:struct 6043:struct 5816:switch 5483:number 5394:assert 5382:return 5334:return 5292:switch 5078:Err(E) 4924:-> 4565:radius 4559:Circle 4499:height 4487:length 4415:Square 3986:result 3980:result 3938:import 3927:Macros 3915:radius 3897:height 3891:length 3834:object 3665:switch 3301:radius 3295:Circle 3232:height 3220:length 3145:Square 3100:sealed 2852:object 2837:sealed 2785:string 2719:string 2638:string 2530:struct 2514:, and 2462:option 2420:Square 2381:struct 2354:return 2348:Square 2330:assert 2312:struct 2285:radius 2276:struct 2264:height 2249:struct 2228:struct 2183:struct 2177:Circle 2165:Square 2105:Radius 2099:Circle 2084:Height 2051:Square 2012:record 1982:Circle 1970:Square 1930:radius 1921:circle 1906:height 1867:square 1825:record 1810:circle 1798:square 1769:, and 1763:Pascal 1731:string 1680:string 1338:(value 1322:  1267:  1229:  1093:  1034:  897:return 841:  800:  606:return 538:folded 525:record 489:, the 377:  364:  358:  131:for a 74:unions 7089:Other 7073:Union 7006:Class 6996:Array 6779:Tryte 6531:CORBA 6515:Scala 6415:right 6394:visit 6376:right 6337:visit 6244:value 6124:right 6082:value 6022:using 6012:C++17 5994:False 5988:total 5982:float 5970:float 5918:break 5912:right 5900:visit 5882:visit 5876:value 5846:break 5795:visit 5762:right 5729:value 5708:right 5675:value 5654:right 5630:right 5597:value 5564:value 5534:const 5501:right 5477:value 5423:With 5283:-> 5084:Swift 5074:Ok(T) 5018:=> 4969:=> 4932:match 4900:))))) 4604:Shape 4538:Shape 4460:Shape 4382:Shape 4367:right 4310:2010s 4205:match 4199:block 3941:patty 3931:patty 3828:Shape 3770:trace 3731:trace 3710:trace 3704:Green 3689:trace 3671:color 3601:Green 3589:Color 3567:-> 3549:-> 3519:match 3416:right 3392:value 3340:Shape 3292:class 3271:Shape 3211:class 3190:Shape 3142:class 3109:Shape 3106:class 3075:=> 3048:=> 3015:match 2900:right 2876:value 2867:class 2843:class 2830:Scala 2803:boost 2761:boost 2737:boost 2695:boost 2641:& 2629:const 2539:boost 2516:Swift 2495:2000s 2466:Maybe 2429:-> 2411:-> 2384:Shape 2360:-> 2339:-> 2315:Shape 2258:width 2222:union 2186:Shape 2102:=> 2078:Width 2075:=> 2054:=> 1991:Shape 1900:width 1819:shape 1727:compl 1689:union 1676:compl 1664:union 1634:1960s 1620:right 1584:right 1332:value 1302:value 1277:value 1103:value 1057:value 851:value 648:value 592:monad 578:Like 133:class 100:(see 70:trees 53:, or 7209:Kind 7171:Void 7031:List 6946:Text 6784:Word 6774:Trit 6769:Byte 6500:RTTI 6424:else 6358:left 6319:left 6295:Node 6286:< 6265:else 6232:cout 6214:Leaf 6205:< 6163:void 6160:> 6151:< 6118:Tree 6106:left 6100:Tree 6094:Node 6067:Leaf 6058:> 6055:Node 6046:Leaf 6040:< 6025:Tree 5906:tree 5894:left 5888:tree 5870:tree 5849:case 5837:case 5828:kind 5822:tree 5807:Tree 5801:tree 5771:kind 5750:kind 5741:left 5717:kind 5696:kind 5687:left 5663:kind 5639:kind 5618:kind 5609:left 5585:kind 5576:left 5552:kind 5543:Tree 5537:root 5531:Node 5525:Leaf 5519:Tree 5516:type 5507:Tree 5495:Tree 5489:left 5465:kind 5459:Node 5441:kind 5435:Leaf 5406:tree 5376:leaf 5370:case 5310:node 5301:case 5295:tree 5277:Tree 5271:tree 5259:func 5250:leaf 5241:leaf 5226:node 5217:leaf 5202:node 5193:leaf 5184:leaf 5169:node 5154:node 5148:Tree 5142:tree 5130:Tree 5124:Tree 5112:node 5109:case 5103:leaf 5100:case 5094:Tree 5091:enum 5062:None 5042:tree 5015:Leaf 5011:Tree 4945:Node 4941:Tree 4935:tree 4919:Tree 4915:tree 4897:Leaf 4893:Tree 4877:Leaf 4873:Tree 4851:Node 4847:Tree 4831:Leaf 4827:Tree 4805:Node 4801:Tree 4788:))), 4785:Leaf 4781:Tree 4765:Leaf 4761:Tree 4739:Node 4735:Tree 4713:Node 4709:Tree 4703:tree 4684:> 4681:Tree 4678:< 4669:> 4666:Tree 4663:< 4648:Node 4642:Leaf 4636:Tree 4633:enum 4624:The 4556:case 4478:case 4421:side 4412:case 4379:enum 4373:Tree 4361:Tree 4355:left 4337:Node 4334:case 4331:Leaf 4328:case 4322:Tree 4319:enum 4271:list 4262:echo 4223:Cons 4184:List 4169:proc 4148:List 4130:list 4127:proc 4100:Cons 4094:else 4061:List 4040:proc 4034:List 4007:Cons 3998:List 3944:proc 3873:side 3855:kind 3852:case 3810:enum 3801:type 3743:case 3725:Blue 3722:case 3701:case 3680:case 3607:Blue 3586:enum 3579:Haxe 3564:Leaf 3531:Node 3525:with 3522:tree 3506:Leaf 3500:Leaf 3488:Node 3482:Leaf 3470:Node 3464:Leaf 3458:Leaf 3446:Node 3434:Node 3428:tree 3422:Tree 3410:Tree 3404:left 3386:Node 3380:Leaf 3371:Tree 3368:type 3289:case 3208:case 3151:side 3139:case 3072:Leaf 3069:case 3024:Node 3021:case 3012:tree 2999:Leaf 2993:Leaf 2981:Node 2975:Leaf 2963:Node 2957:Leaf 2951:Leaf 2939:Node 2927:Node 2921:tree 2915:Tree 2906:Tree 2894:Tree 2888:left 2870:Node 2864:case 2861:Tree 2855:Leaf 2849:case 2846:Tree 2788:> 2770:< 2722:> 2704:< 2683:endl 2659:cout 2620:void 2611:endl 2587:cout 2560:void 2554:> 2551:void 2548:< 2512:Haxe 2508:Rust 2485:null 2438:side 2432:side 2414:kind 2399:side 2372:void 2363:side 2342:kind 2237:side 2216:kind 2210:enum 2156:enum 2147:and 2120:case 2096:when 2069:when 2057:Side 2048:when 2042:Kind 2039:case 1997:Kind 1988:type 1958:type 1876:side 1855:kind 1852:case 1786:type 1739:esac 1719:real 1711:case 1707:node 1700:node 1694:case 1668:real 1660:node 1657:mode 1649:case 1605:left 1578:left 1566:Node 1545:Leaf 1512:Leaf 1506:Leaf 1494:Node 1488:Leaf 1476:Node 1470:Leaf 1464:Leaf 1452:Node 1440:Node 1426:tree 1420:tree 1405:Node 1399:Leaf 1393:tree 1283:(err 1142:join 919:fmap 905:join 903:and 901:fmap 887:and 675:bind 582:and 471:rope 324:and 285:and 276:and 232:and 193:dual 114:enum 110:Rust 92:and 23:, a 7068:Set 6764:Bit 6713:2.0 6486:in 6403:{}, 6388:std 6346:{}, 6331:std 6277:std 6226:std 6196:std 6169:()( 6073:std 6031:std 5864:log 5304:let 5286:Int 5139:let 5118:Int 5076:or 5064:or 4926:i64 4887:new 4883:Box 4867:new 4863:Box 4841:new 4837:Box 4821:new 4817:Box 4795:new 4791:Box 4775:new 4771:Box 4755:new 4751:Box 4729:new 4725:Box 4700:let 4675:Box 4660:Box 4654:i64 4595:Int 4583:Int 4571:Int 4529:Int 4517:Int 4505:Int 4493:Int 4451:Int 4439:Int 4427:Int 4406:Int 4394:Int 4349:Int 4265:sum 4247:sum 4214:Nil 4190:int 4172:sum 4088:Nil 4076:len 4055:seq 4031:ref 4004:Nil 3974:new 3965:ref 3947:`~` 3921:int 3903:int 3879:int 3849:int 3794:Nim 3746:Rgb 3683:Red 3649:Int 3637:Int 3625:Int 3613:Rgb 3595:Red 3509:))) 3425:let 3398:int 3331:Int 3319:Int 3307:Int 3262:Int 3250:Int 3238:Int 3226:Int 3181:Int 3169:Int 3157:Int 3133:Int 3121:Int 3002:))) 2918:val 2882:Int 2818:(), 2779:std 2773:int 2752:(), 2713:std 2707:int 2677:std 2653:std 2632:std 2626:()( 2605:std 2581:std 2569:int 2566:()( 2396:int 2303:int 2282:int 2255:int 2234:int 2201:int 2192:int 2149:C++ 2143:In 2117:end 1945:end 1767:Ada 1735:out 1723:int 1697:of 1672:int 1638:In 1572:int 1536:fun 1515:))) 1414:int 1252:err 1239:err 1212:err 1044:err 1019:err 810:err 785:err 544:or 458:An 258:in 235:inj 215:inj 195:of 183:In 160:or 144:or 65:tag 19:In 7278:: 6676:. 6652:. 6586:. 6466:}; 6460:}; 6457:); 6451:), 6418:); 6391::: 6379:!= 6364:if 6361:); 6334::: 6322:!= 6307:if 6280::: 6268:if 6253:\n 6229::: 6199::: 6187:if 6136:}; 6088:}; 6076::: 6034::: 5997:), 5985:}, 5759:}, 5705:}, 5651:}, 5627:}, 5412:== 5331:): 5253:)) 5196:), 5080:. 5051:); 5045:), 5013::: 5008:), 4943::: 4917:: 4906:fn 4903:); 4895::: 4885::: 4880:), 4875::: 4865::: 4849::: 4839::: 4834:), 4829::: 4819::: 4803::: 4793::: 4783::: 4773::: 4768:), 4763::: 4753::: 4737::: 4727::: 4711::: 4409:): 4304:)) 4253:ys 4238:): 4235:ys 4208:xs 4187:): 4178:xs 4163:xs 4145:): 4136:xs 4124:)) 4121:xs 4106:xs 4091:() 4079:== 4070:xs 4067:if 4058:): 4049:xs 4025:xs 3962:): 3906:of 3882:of 3864:of 3785:); 3767:): 3740:); 3719:); 3698:); 3652:); 3546:_) 3543:_, 3467:), 3389:of 3361:F# 2960:), 2824:); 2806::: 2782::: 2764::: 2758:); 2740::: 2731:42 2716::: 2698::: 2692:}; 2680::: 2656::: 2635::: 2608::: 2584::: 2542::: 2510:, 2479:A 2351:); 2345:== 2300:}; 2297:}; 2291:}; 2270:}; 2243:}; 2180:}; 2045:is 2009:is 2000:: 1985:); 1964:is 1864:of 1765:, 1753:ML 1715:in 1713:n 1703:: 1682:); 1678:, 1674:, 1670:, 1662:= 1587:)) 1473:), 1408:of 1318:if 1263:if 1224:if 1089:if 1030:if 907:: 837:if 796:if 560:. 540:, 511:. 485:, 477:, 473:, 455:. 329:: 319:: 271:+ 247:+ 243:→ 239:: 227:+ 223:→ 219:: 213:) 204:+ 180:. 168:+ 152:+ 90:ML 49:, 43:, 39:, 35:, 31:, 6740:e 6733:t 6726:v 6711:D 6686:. 6662:. 6596:. 6558:. 6463:} 6448:T 6445:( 6439:! 6436:( 6427:{ 6421:} 6412:. 6409:v 6406:* 6397:( 6385:) 6373:. 6370:v 6367:( 6355:. 6352:v 6349:* 6340:( 6328:) 6316:. 6313:v 6310:( 6304:{ 6301:) 6292:, 6289:T 6274:( 6262:} 6259:; 6241:. 6238:v 6223:{ 6220:) 6211:, 6208:T 6193:( 6184:{ 6181:) 6178:v 6172:T 6157:T 6145:{ 6133:; 6127:= 6121:* 6115:; 6109:= 6103:* 6097:{ 6085:; 6070:{ 6061:; 6049:, 6028:= 6006:] 6003:, 5991:= 5979:: 5973:, 5967:: 5961:{ 5958:, 5952:( 5946:[ 5940:= 5924:} 5921:} 5915:) 5909:. 5903:( 5897:) 5891:. 5885:( 5879:) 5873:. 5867:( 5861:. 5855:: 5843:: 5834:{ 5831:) 5825:. 5819:( 5813:{ 5810:) 5804:: 5798:( 5789:} 5786:} 5783:} 5780:} 5774:: 5768:{ 5765:: 5753:: 5747:{ 5744:: 5738:, 5735:4 5732:: 5726:, 5720:: 5714:{ 5711:: 5699:: 5693:{ 5690:: 5684:, 5681:3 5678:: 5672:, 5666:: 5660:{ 5657:: 5648:} 5642:: 5636:{ 5633:: 5621:: 5615:{ 5612:: 5606:, 5603:1 5600:: 5594:, 5588:: 5582:{ 5579:: 5573:, 5570:5 5567:: 5561:, 5555:: 5549:{ 5546:= 5540:: 5528:| 5522:= 5513:} 5510:; 5504:: 5498:; 5492:: 5486:; 5480:: 5474:; 5468:: 5462:{ 5453:} 5450:; 5444:: 5438:{ 5418:) 5415:9 5409:) 5403:( 5397:( 5391:} 5388:} 5385:0 5379:: 5373:. 5367:) 5364:b 5361:( 5355:+ 5352:) 5349:a 5346:( 5340:+ 5337:v 5328:b 5325:, 5322:a 5319:, 5316:v 5313:( 5307:. 5298:{ 5289:{ 5280:) 5274:: 5268:_ 5265:( 5256:) 5247:. 5244:, 5238:. 5235:, 5232:4 5229:( 5223:. 5220:, 5214:. 5211:, 5208:3 5205:( 5199:. 5190:. 5187:, 5181:. 5178:, 5175:0 5172:( 5166:. 5163:, 5160:2 5157:( 5151:. 5145:= 5136:} 5133:) 5127:, 5121:, 5115:( 5097:{ 5048:9 5039:( 5033:( 5027:} 5024:} 5021:0 5005:b 5002:* 4999:( 4993:+ 4990:) 4987:a 4984:* 4981:( 4975:+ 4972:v 4966:) 4963:b 4960:, 4957:a 4954:, 4951:v 4948:( 4938:{ 4929:{ 4922:) 4912:( 4890:( 4870:( 4860:, 4857:4 4854:( 4844:( 4824:( 4814:, 4811:3 4808:( 4798:( 4778:( 4758:( 4748:, 4745:0 4742:( 4732:( 4722:, 4719:2 4716:( 4706:= 4690:} 4687:) 4672:, 4657:, 4651:( 4645:, 4639:{ 4619:) 4613:, 4607:( 4598:) 4592:: 4586:, 4580:: 4574:, 4568:: 4562:( 4553:) 4547:, 4541:( 4532:) 4526:: 4520:, 4514:: 4508:, 4502:: 4496:, 4490:: 4484:( 4475:) 4469:, 4463:( 4454:) 4448:: 4442:, 4436:: 4430:, 4424:: 4418:( 4403:: 4397:, 4391:: 4385:( 4376:) 4370:: 4364:, 4358:: 4352:, 4346:: 4343:x 4340:( 4325:: 4301:5 4298:, 4295:4 4292:, 4289:3 4286:, 4283:2 4280:, 4277:1 4274:( 4268:( 4259:) 4256:) 4250:( 4244:+ 4241:y 4232:, 4229:y 4226:( 4220:0 4217:: 4211:: 4202:: 4196:( 4193:= 4181:: 4175:( 4166:) 4160:@ 4157:( 4151:= 4139:: 4133:( 4118:( 4112:~ 4109:, 4103:( 4097:: 4085:: 4082:0 4073:. 4064:= 4052:: 4046:( 4037:) 4028:: 4022:, 4019:A 4016:: 4013:x 4010:( 4001:: 3992:a 3989:= 3983:) 3977:( 3971:= 3968:A 3959:A 3956:: 3953:a 3950:( 3933:: 3918:: 3912:: 3900:: 3894:, 3888:: 3876:: 3870:: 3858:: 3846:: 3840:, 3831:= 3822:, 3816:, 3807:= 3788:} 3782:r 3779:+ 3773:( 3764:b 3761:, 3758:g 3755:, 3752:r 3749:( 3734:( 3728:: 3713:( 3707:: 3692:( 3686:: 3677:{ 3674:) 3668:( 3655:} 3646:: 3643:b 3640:, 3634:: 3631:g 3628:, 3622:: 3619:r 3616:( 3610:; 3604:; 3598:; 3592:{ 3561:| 3558:x 3540:, 3537:x 3534:( 3528:| 3503:, 3497:, 3494:4 3491:( 3485:, 3479:, 3476:3 3473:( 3461:, 3455:, 3452:1 3449:( 3443:, 3440:5 3437:( 3431:= 3419:: 3413:* 3407:: 3401:* 3395:: 3383:| 3377:| 3374:= 3355:) 3349:, 3343:( 3334:) 3328:: 3322:, 3316:: 3310:, 3304:: 3298:( 3286:) 3280:, 3274:( 3265:) 3259:: 3253:, 3247:: 3241:, 3235:: 3229:, 3223:: 3217:( 3205:) 3199:, 3193:( 3184:) 3178:: 3172:, 3166:: 3160:, 3154:: 3148:( 3136:) 3130:: 3124:, 3118:: 3112:( 3090:} 3087:) 3081:( 3066:) 3063:x 3060:+ 3054:( 3045:) 3042:_ 3039:, 3036:_ 3033:, 3030:x 3027:( 3018:{ 2996:, 2990:, 2987:4 2984:( 2978:, 2972:, 2969:3 2966:( 2954:, 2948:, 2945:1 2942:( 2936:, 2933:5 2930:( 2924:= 2909:) 2903:: 2897:, 2891:: 2885:, 2879:: 2873:( 2821:v 2812:( 2800:; 2794:= 2791:v 2776:, 2755:v 2746:( 2734:; 2728:= 2725:v 2710:, 2689:} 2686:; 2671:s 2650:{ 2647:) 2644:s 2617:} 2614:; 2599:i 2578:{ 2575:) 2572:i 2557:{ 2536:: 2444:} 2441:; 2435:= 2426:s 2423:; 2417:= 2408:s 2405:{ 2402:) 2393:, 2390:s 2387:* 2378:( 2369:} 2366:; 2357:s 2336:s 2333:( 2327:{ 2324:) 2321:s 2318:* 2309:( 2288:; 2279:{ 2267:; 2261:, 2252:{ 2240:; 2231:{ 2225:{ 2219:; 2207:; 2198:; 2189:{ 2174:, 2168:, 2162:{ 2145:C 2129:; 2123:; 2114:; 2108:: 2093:; 2087:: 2081:, 2066:; 2060:: 2036:; 2030:: 2024:; 2018:: 2006:) 1994:( 1979:, 1973:, 1967:( 1948:; 1942:; 1939:) 1933:: 1927:( 1924:: 1918:; 1915:) 1909:: 1903:, 1897:( 1894:: 1888:; 1885:) 1879:: 1873:( 1870:: 1858:: 1849:; 1843:: 1837:; 1831:: 1822:= 1816:; 1813:) 1807:, 1801:, 1795:( 1792:= 1717:( 1666:( 1623:) 1617:( 1611:+ 1608:) 1602:( 1596:+ 1593:1 1590:= 1581:, 1575:, 1569:( 1563:( 1557:| 1554:0 1551:= 1548:) 1542:( 1509:, 1503:, 1500:4 1497:( 1491:, 1485:, 1482:3 1479:( 1467:, 1461:, 1458:1 1455:( 1449:, 1446:5 1443:( 1429:) 1423:* 1417:* 1411:( 1402:| 1396:= 1353:) 1344:a 1328:= 1325:a 1308:a 1293:) 1288:e 1273:= 1270:a 1257:e 1244:e 1235:= 1232:a 1217:e 1205:{ 1197:a 1194:= 1191:) 1188:E 1185:+ 1182:A 1179:( 1173:) 1170:E 1167:+ 1164:) 1161:E 1158:+ 1155:A 1152:( 1149:( 1109:a 1099:= 1096:a 1082:) 1073:a 1068:f 1063:( 1049:e 1040:= 1037:a 1024:e 1012:{ 1004:a 998:f 995:= 991:) 986:) 982:E 979:+ 976:B 972:( 964:) 960:E 957:+ 954:A 950:( 945:( 938:) 935:B 929:A 926:( 893:E 889:B 885:A 857:a 847:= 844:a 827:a 822:f 815:e 806:= 803:a 790:e 778:{ 770:f 764:a 761:= 757:) 753:E 750:+ 747:B 743:( 735:) 730:) 726:E 723:+ 720:B 716:( 709:A 705:( 697:) 693:E 690:+ 687:A 683:( 653:a 641:a 638:= 634:) 630:E 627:+ 624:A 620:( 613:A 410:2 406:e 399:y 391:1 387:e 380:x 372:f 369:o 361:e 353:e 350:s 347:a 344:c 331:B 327:y 321:A 317:x 291:2 288:e 282:1 279:e 273:B 269:A 264:e 252:. 249:B 245:A 241:B 237:2 229:B 225:A 221:A 217:1 206:B 202:A 178:B 174:A 170:B 166:A 162:B 158:A 154:B 150:A

Index

computer science
disjoint union
coproduct
data structure
trees
unions
functional programming
ML
Haskell
algebraic data type
compiler
Rust
programming language
constructor
constructor
class
disjoint
type theory
dual
product types
injections
pattern matching
ML-style
intuitionistic
logical disjunction
Curry–Howard correspondence
enumerated type
unit types
rope
lazy evaluation

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

↑