Knowledge (XXG)

Curry (programming language)

Source 📝

2180: 1861: 228: 2228: 2218: 2208: 2047: 2037: 2027: 36: 416:
A functional program is a set of functions defined by equations or rules. A functional computation consists of replacing subexpressions by equal (with regard to the function definitions) subexpressions until no more replacements (or reductions) are possible and a value or normal form is obtained. For
821:
to a value selected from among alternatives imposed by constraints. Each possible value is tried in some order, with the remainder of the program invoked in each case to determine the validity of the binding. Narrowing is an extension of logic programming, in that it performs a similar search, but
734:
Based on this specification, one can define a function that satisfies this specification by employing logic programming features. Similarly to logic languages, functional logic languages provide search for solutions for existentially quantified variables. In contrast to pure logic languages, they
808:
r is applicable for reduction if its condition c has been solved. In contrast to purely functional languages where conditions are only evaluated to a Boolean value, functional logic languages support the solving of conditions by guessing values for the unknowns in the condition. Narrowing as
796:” is used for equational constraints in order to provide a syntactic distinction from defining equations. Similarly, extra variables (i.e., variables not occurring in the left-hand side of the defining equation) are explicitly declared by “ 904:
Since Curry is able to solve equations containing function calls with unknown values, its execution mechanism is based on non-deterministic computations, similarly to logic programming. This mechanism supports also the definition of
836:, is optimal in the sense of doing a number of reductions to get to a "normal form" corresponding to a solution that is minimal among sound and complete strategies. Needed narrowing corresponds to a lazy strategy, in contrast to the 719:” is also useful to specify the behavior of other functions on lists. For instance, the behavior of a function last that yields the last element of a list can be specified as follows: for all lists xs and elements e, 1081:
with non-deterministic search strategies. In contrast to Prolog, which uses backtracking to search for solutions, Curry does not fix a particular search strategy. Hence, there are implementations of Curry, like
630:
are written as . We can define operations on recursive types by inductive definitions where pattern matching supports the convenient separation of the different cases. For instance, the concatenation operation
403:
It is nearly a superset of Haskell but does not support all language extensions of Haskell. In contrast to Haskell, Curry has built-in support for non-deterministic computations involving search.
896:. Functional patterns are enabled by the combined functional and logic features of Curry and support concise definitions of tasks requiring deep pattern matching in hierarchical data structures. 825:
Narrowing is useful because it allows a function to be treated as a relation: its value can be computed "in both directions". The Curry examples of the previous section illustrate this.
2284: 2269: 2279: 2222: 1428: 1073:
Due to the absence of side effects, a functional logic program can be executed with different strategies. To evaluate expressions, Curry uses a variant of the
2274: 2041: 2264: 909:, i.e., operations that delivers more than one result for a given input. The archetype of non-deterministic operations is the predefined infix operation 2259: 2254: 2299: 2294: 2084: 19:
This article is about the programming language Curry (named in honour of a mathematician and logician). For the mathematician and logician, see
174: 1399:(Braßel, Fischer, Hanus, Reck, 2010) on modeling lazy non-deterministic (logic) programming (like in Curry) in a purely functional language ( 1301: 1268: 2212: 828:
As noted in the prior section, narrowing can be thought of as reduction on a program term graph, and there are often many different ways (
100: 1455: 329: 72: 1403:); such approach might give the programmer more flexibility in the control over the strategies that—in the case of Curry—are built-in. 1925: 119: 57: 50: 79: 1970: 1945: 186: 2122: 515:
Functions on Booleans can be defined by pattern matching, i.e., by providing several equations for different argument values:
546:
The principle of replacing equals by equals is still valid provided that the actual arguments have the required form, e.g.:
468: 190: 935:. Computing with non-deterministic operations and computing with free variables by narrowing has the same expressive power. 86: 2289: 1955: 1777: 1587: 1619: 1572: 1494: 1414: 389: 1421: 68: 2232: 1915: 1627: 1565: 1534: 942:
show an important feature of Curry: all rules are tried in order to evaluate some operation. Hence, one can define by
460: 219: 1995: 1558: 639:” takes two lists as input and produces an output list, where all list elements are of the same unspecified type): 447:, etc. In a similar way, one can evaluate nested expressions (where the subexpressions to be replaced are quoted): 635:” on polymorphic lists can be defined as follows (the optional type declaration in the first line specifies that “ 46: 2077: 2051: 1608: 1372: 182: 2179: 2026: 1860: 1839: 1814: 1479: 1345: 888:
Haskell does not allow such a declaration since the pattern in the left-hand side contains a defined function (
464: 348: 800:” in order to provide some opportunities to detect bugs caused by typos. A conditional equation of the form l 178: 1751: 1284:
Sergio, Antoy; Hanus, Michael (2006). "Overlapping Rules and Logic Variables in Functional Logic Programs".
385: 278: 560:. For instance, a list of elements, where the type of elements is arbitrary (denoted by the type variable 467:: the value of a computed result does not depend on the order or time of evaluation, due to the absence of 2070: 856:
shown above expresses the fact that the actual argument must match the result of narrowing the expression
397: 250: 143: 482:
by enumerating their constructors. For instance, the type of Boolean values consists of the constructors
1885: 1763: 1378: 93: 832:) to reduce a given term graph. Antoy et al. proved in the 1990s that a particular narrowing strategy, 453:
There is also another order of evaluation if we replace the arguments of operators from right to left:
2201: 2142: 2110: 2020: 1757: 1091: 138: 1655: 1522: 1473: 1395: 822:
can actually generate values as part of the search rather than just being limited to testing them.
557: 479: 227: 1389: 1975: 1920: 1875: 1801: 1540: 1499: 1233: 1183: 1165: 1087: 1009:
an operation to insert an element into a list at an indeterminate position so that the operation
261: 165: 2132: 1297: 1264: 1225: 917:
operator, that returns one of its arguments. This operator is defined by the following rules:
306: 147: 1935: 1713: 1696: 1664: 1485: 1460: 1289: 1256: 1217: 1157: 289: 273: 1950: 1702: 1688: 1671: 1595: 1111: 1078: 170: 155: 1251:
Sergio, Antoy; Hanus, Michael (2006). "Declarative Programming with Function Patterns".
1930: 1821: 1332:- A web-based execution environment for Curry and Haskell with various example programs 837: 735:
support equation solving over nested functional expressions so that an equation like ys
553: 254: 1208:
Sergio, Antoy; Echahed, Rachid; Hanus, Michael (2007). "A Needed Narrowing Strategy".
2248: 2093: 2000: 1965: 1902: 1743: 1636: 246: 20: 1237: 1169: 1980: 1960: 818: 294: 1368: 2105: 1990: 1602: 463:. This follows from a fundamental property of pure functional languages, termed 241: 35: 2031: 1940: 1677: 1359: 1083: 471:. This simplifies reasoning about, and maintaining, pure functional programs. 352: 1229: 1846: 1795: 1726: 1350: 1161: 459:
In this case, both derivations lead to the same result, a property known as
396:
language. It merges elements of functional and logic programming, including
336: 1221: 860:. Curry can express this property also in the following more concise way: 2151: 2127: 2101: 1985: 1633: 1579: 1446: 24: 1383: 809:
discussed in the next section is used to solve this kind of conditions.
2164: 1721: 1546: 1437: 1400: 1396:
Transforming Functional Logic Programs into Monadic Functional Programs
1363: 1329: 1293: 1260: 475: 393: 369: 356: 1406: 1341: 1288:. Lecture Notes in Computer Science. Vol. 4079. pp. 87–101. 1148:
Sergio, Antoy; Hanus, Michael (2010). "Functional Logic Programming".
344: 1894: 1832: 1827: 1789: 1732: 1354: 841: 715:
Beyond its application for various programming tasks, the operation “
373: 340: 266: 1255:. Lecture Notes in Computer Science. Vol. 3901. pp. 6–22. 1807: 1783: 282: 739:= is solved by instantiating ys to the list and e to the value 2062: 2066: 1410: 1510: 1335: 29: 1134: 1322: 1086:, where the user can easily select a search strategy, like 743:. In Curry one can define the operation last as follows: 456:'double (1+2)' → (1+2)+'(1+2)' → '(1+2)'+3 → '3+3' → 6 450:'double (1+2)' → '(1+2)'+(1+2) → 3+'(1+2)' → '3+3' → 6 439:” to be defined by an infinite set of equations, e.g., 564:), is either the empty list “” or the non-empty list “ 1135:"Curry: A Truly Integrated Functional Logic Language" 1390:
Purely Functional Lazy Non-deterministic Programming
2141: 2100: 1893: 1884: 1868: 1742: 1712: 1687: 1654: 1618: 1521: 1454: 1445: 363: 327: 301: 288: 272: 260: 240: 218: 196: 164: 154: 137: 417:instance, consider the function double defined by 1253:Logic Based Program Synthesis and Transformation 1112:"Current release:PAKCS Version 3.6.0 (10/11/23)" 1065:returns any permutation of a given input list. 817:Narrowing is a mechanism whereby a variable is 2078: 1422: 1338:- A collection of software packages for Curry 8: 614:” is usually written as and finite lists x1 132: 1094:, iterative deepening, or parallel search. 407:Foundations of functional logic programming 2115: 2085: 2071: 2063: 1890: 1527: 1466: 1451: 1429: 1415: 1407: 226: 131: 23:. For the computer science technique, see 1184:"Curry experimental programming language" 120:Learn how and when to remove this message 1103: 923:Thus, the evaluation of the expression 549:not '(not False)' → 'not True' → False 2285:Nondeterministic programming languages 2270:Functional logic programming languages 1353:A major Curry implementation, targets 1344:- The Münster Curry Compiler, targets 175:Ludwig Maximilian University of Munich 56:Please improve this article by adding 2280:Programming languages created in 1995 478:do, Curry supports the definition of 7: 2275:Haskell programming language family 1375:, and supports fair parallel search 388:language, an implementation of the 160:Michael Hanus, Sergio Antoy, et al. 2265:Experimental programming languages 2213:Category:Mathematical philosophers 474:As many functional languages like 14: 1393:(Fischer, Kiselyov, Shan, 2009), 892:). Such a pattern is also called 69:"Curry" programming language 2260:Concurrent programming languages 2255:High-level programming languages 2227: 2226: 2217: 2216: 2207: 2206: 2178: 2046: 2045: 2036: 2035: 2025: 1859: 1371:A Curry implementation, targets 1362:A Curry implementation, targets 568:” consisting of a first element 431:. The latter can be replaced by 187:Complutense University of Madrid 34: 920:x ? y = x x ? y = y 2300:Software using the BSD license 2295:Academic programming languages 490:that are declared as follows: 435:if we interpret the operator “ 191:Technical University of Madrid 1: 58:secondary or tertiary sources 907:non-deterministic operations 390:functional logic programming 2123:Curry–Howard correspondence 392:paradigm, and based on the 202:; 29 years ago 2316: 18: 2187: 2176: 2118: 2009: 1857: 1773: 1530: 1469: 1384:Michael Hanus's home page 1150:Communications of the ACM 368: 335: 236: 214: 183:Portland State University 1480:Glasgow Haskell Compiler 1077:strategy which combines 1015: 944: 862: 745: 641: 578: 517: 492: 465:referential transparency 2223:Category:Mathematicians 1162:10.1145/1721654.1721675 386:declarative programming 1133:Hanus, Michael (ed.). 398:constraint programming 45:relies excessively on 2143:Programming languages 1506:York Haskell Compiler 1222:10.1145/347476.347484 179:University of Münster 150:, non-strict, modular 2290:Literate programming 2202:Open-source software 2111:computer programming 2021:Open-source software 1092:breadth-first search 558:recursive data types 480:algebraic data types 231:/ (10 November 2023) 16:Programming language 1216:(4). ACM: 776–822. 938:The rules defining 848:Functional patterns 556:can be obtained by 197:First appeared 134: 2233:Category:Logicians 1976:Simon Peyton Jones 1921:Lennart Augustsson 1876:Real World Haskell 1541:Concurrent Haskell 1379:Curry Mailing List 1294:10.1007/11799573_9 1261:10.1007/11680093_2 1210:Journal of the ACM 1114:. 10 November 2023 1088:depth-first search 894:functional pattern 852:The rule defining 792:Here, the symbol “ 2242: 2241: 2174: 2173: 2060: 2059: 2052:Category:Software 1911: 1910: 1855: 1854: 1714:Windowing systems 1650: 1649: 1646: 1645: 1620:Electronic design 1303:978-3-540-36635-5 1286:Logic Programming 1270:978-3-540-32654-0 1156:(4). ACM: 74–85. 427:” is replaced by 379: 378: 242:Typing discipline 130: 129: 122: 104: 2307: 2230: 2229: 2220: 2219: 2210: 2209: 2182: 2116: 2087: 2080: 2073: 2064: 2049: 2048: 2039: 2038: 2029: 1936:Andrew D. Gordon 1891: 1863: 1689:Package managers 1665:Haskell Platform 1528: 1486:Template Haskell 1467: 1452: 1431: 1424: 1417: 1408: 1326: 1325: 1323:Official website 1308: 1307: 1281: 1275: 1274: 1248: 1242: 1241: 1205: 1199: 1198: 1196: 1194: 1180: 1174: 1173: 1145: 1139: 1138: 1130: 1124: 1123: 1121: 1119: 1108: 1090:(backtracking), 1075:needed narrowing 1061: 1058: 1055: 1052: 1049: 1046: 1043: 1040: 1037: 1034: 1031: 1028: 1025: 1022: 1019: 1012: 1005: 1002: 999: 996: 993: 990: 987: 984: 981: 978: 975: 972: 969: 966: 963: 960: 957: 954: 951: 948: 941: 934: 930: 926: 912: 891: 884: 881: 878: 875: 872: 869: 866: 859: 855: 834:needed narrowing 807: 803: 799: 795: 788: 785: 782: 779: 776: 773: 770: 767: 764: 761: 758: 755: 752: 749: 742: 738: 730: 726: 722: 718: 711: 708: 705: 702: 699: 696: 693: 690: 687: 684: 681: 678: 675: 672: 669: 666: 663: 660: 657: 654: 651: 648: 645: 638: 634: 629: 625: 621: 617: 613: 606: 603: 600: 597: 594: 591: 588: 585: 582: 575: 571: 567: 563: 542: 539: 536: 533: 530: 527: 524: 521: 511: 508: 505: 502: 499: 496: 489: 485: 446: 442: 438: 434: 430: 426: 423:The expression “ 323: 320: 318: 316: 314: 312: 310: 308: 230: 210: 208: 203: 156:Designed by 135: 125: 118: 114: 111: 105: 103: 62: 38: 30: 2315: 2314: 2310: 2309: 2308: 2306: 2305: 2304: 2245: 2244: 2243: 2238: 2205: 2183: 2170: 2137: 2133:Curry's paradox 2109: 2096: 2091: 2061: 2056: 2042:Category:Family 2024: 2005: 1956:John MacFarlane 1951:John Launchbury 1907: 1880: 1864: 1851: 1769: 1738: 1708: 1683: 1642: 1614: 1517: 1474:Generic Haskell 1458: 1456:Implementations 1441: 1435: 1321: 1320: 1317: 1312: 1311: 1304: 1283: 1282: 1278: 1271: 1250: 1249: 1245: 1207: 1206: 1202: 1192: 1190: 1182: 1181: 1177: 1147: 1146: 1142: 1132: 1131: 1127: 1117: 1115: 1110: 1109: 1105: 1100: 1079:lazy evaluation 1071: 1063: 1062: 1059: 1056: 1053: 1050: 1047: 1044: 1041: 1038: 1035: 1032: 1029: 1026: 1023: 1020: 1017: 1010: 1007: 1006: 1003: 1000: 997: 994: 991: 988: 985: 982: 979: 976: 973: 970: 967: 964: 961: 958: 955: 952: 949: 946: 939: 932: 928: 924: 921: 910: 902: 900:Non-determinism 889: 886: 885: 882: 879: 876: 873: 870: 867: 864: 857: 853: 850: 815: 805: 801: 797: 793: 790: 789: 786: 783: 780: 777: 774: 771: 768: 765: 762: 759: 756: 753: 750: 747: 740: 736: 728: 724: 720: 716: 713: 712: 709: 706: 703: 700: 697: 694: 691: 688: 685: 682: 679: 676: 673: 670: 667: 664: 661: 658: 655: 652: 649: 646: 643: 636: 632: 627: 623: 619: 615: 611: 608: 607: 604: 601: 598: 595: 592: 589: 586: 583: 580: 573: 569: 565: 561: 554:data structures 550: 544: 543: 540: 537: 534: 531: 528: 525: 522: 519: 513: 512: 509: 506: 503: 500: 497: 494: 487: 483: 457: 451: 444: 440: 436: 432: 428: 424: 421: 420:double x = x+x 414: 409: 330:implementations 305: 232: 206: 204: 201: 189: 185: 181: 177: 173: 171:Kiel University 126: 115: 109: 106: 63: 61: 55: 51:primary sources 39: 28: 17: 12: 11: 5: 2313: 2311: 2303: 2302: 2297: 2292: 2287: 2282: 2277: 2272: 2267: 2262: 2257: 2247: 2246: 2240: 2239: 2237: 2236: 2197: 2195:= discontinued 2188: 2185: 2184: 2177: 2175: 2172: 2171: 2169: 2168: 2162: 2156: 2147: 2145: 2139: 2138: 2136: 2135: 2130: 2125: 2119: 2113: 2098: 2097: 2092: 2090: 2089: 2082: 2075: 2067: 2058: 2057: 2055: 2015:= discontinued 2010: 2007: 2006: 2004: 2003: 1998: 1996:Simon Thompson 1993: 1988: 1983: 1978: 1973: 1968: 1963: 1958: 1953: 1948: 1943: 1938: 1933: 1931:Jeremy Gibbons 1928: 1923: 1918: 1912: 1909: 1908: 1906: 1905: 1899: 1897: 1888: 1882: 1881: 1879: 1878: 1872: 1870: 1866: 1865: 1858: 1856: 1853: 1852: 1850: 1849: 1844: 1836: 1830: 1825: 1822:Liquid Haskell 1819: 1811: 1805: 1799: 1793: 1787: 1781: 1774: 1771: 1770: 1768: 1767: 1761: 1755: 1748: 1746: 1744:Web frameworks 1740: 1739: 1737: 1736: 1730: 1724: 1718: 1716: 1710: 1709: 1707: 1706: 1700: 1693: 1691: 1685: 1684: 1682: 1681: 1675: 1669: 1660: 1658: 1652: 1651: 1648: 1647: 1644: 1643: 1641: 1640: 1631: 1624: 1622: 1616: 1615: 1613: 1612: 1606: 1600: 1592: 1584: 1576: 1570: 1562: 1556: 1550: 1544: 1538: 1531: 1525: 1519: 1518: 1516: 1515: 1503: 1491: 1490: 1489: 1477: 1470: 1464: 1449: 1443: 1442: 1436: 1434: 1433: 1426: 1419: 1411: 1405: 1404: 1386: 1381: 1376: 1366: 1357: 1348: 1339: 1336:Curry packages 1333: 1327: 1316: 1315:External links 1313: 1310: 1309: 1302: 1276: 1269: 1243: 1200: 1175: 1140: 1125: 1102: 1101: 1099: 1096: 1070: 1067: 1016: 945: 919: 901: 898: 863: 849: 846: 838:SLD-resolution 814: 811: 746: 642: 579: 548: 518: 493: 455: 449: 419: 413: 412:Basic concepts 410: 408: 405: 377: 376: 366: 365: 361: 360: 333: 332: 325: 324: 303: 299: 298: 292: 286: 285: 279:Cross-platform 276: 270: 269: 264: 258: 257: 244: 238: 237: 234: 233: 224: 222: 220:Stable release 216: 215: 212: 211: 198: 194: 193: 168: 162: 161: 158: 152: 151: 141: 128: 127: 42: 40: 33: 15: 13: 10: 9: 6: 4: 3: 2: 2312: 2301: 2298: 2296: 2293: 2291: 2288: 2286: 2283: 2281: 2278: 2276: 2273: 2271: 2268: 2266: 2263: 2261: 2258: 2256: 2253: 2252: 2250: 2235: 2234: 2225: 2224: 2215: 2214: 2204: 2203: 2198: 2196: 2193: 2190: 2189: 2186: 2181: 2166: 2163: 2160: 2157: 2154: 2153: 2149: 2148: 2146: 2144: 2140: 2134: 2131: 2129: 2126: 2124: 2121: 2120: 2117: 2114: 2112: 2107: 2103: 2099: 2095: 2094:Haskell Curry 2088: 2083: 2081: 2076: 2074: 2069: 2068: 2065: 2054: 2053: 2044: 2043: 2034: 2033: 2028: 2023: 2022: 2017: 2016: 2013: 2008: 2002: 2001:Philip Wadler 1999: 1997: 1994: 1992: 1989: 1987: 1984: 1982: 1979: 1977: 1974: 1972: 1969: 1967: 1966:Conor McBride 1964: 1962: 1959: 1957: 1954: 1952: 1949: 1947: 1944: 1942: 1939: 1937: 1934: 1932: 1929: 1927: 1924: 1922: 1919: 1917: 1914: 1913: 1904: 1903:Haskell Curry 1901: 1900: 1898: 1896: 1892: 1889: 1887: 1883: 1877: 1874: 1873: 1871: 1867: 1862: 1848: 1845: 1842: 1841: 1837: 1834: 1831: 1829: 1826: 1823: 1820: 1817: 1816: 1812: 1809: 1806: 1803: 1800: 1797: 1794: 1791: 1788: 1785: 1782: 1779: 1776: 1775: 1772: 1765: 1762: 1759: 1756: 1753: 1750: 1749: 1747: 1745: 1741: 1734: 1731: 1728: 1725: 1723: 1720: 1719: 1717: 1715: 1711: 1704: 1701: 1698: 1695: 1694: 1692: 1690: 1686: 1679: 1676: 1673: 1670: 1667: 1666: 1662: 1661: 1659: 1657: 1653: 1638: 1637:SystemVerilog 1635: 1632: 1629: 1626: 1625: 1623: 1621: 1617: 1610: 1607: 1604: 1601: 1598: 1597: 1593: 1590: 1589: 1585: 1582: 1581: 1577: 1574: 1571: 1568: 1567: 1563: 1560: 1557: 1554: 1551: 1548: 1545: 1542: 1539: 1536: 1533: 1532: 1529: 1526: 1524: 1520: 1513: 1512: 1507: 1504: 1501: 1497: 1496: 1492: 1487: 1484: 1483: 1481: 1478: 1475: 1472: 1471: 1468: 1465: 1462: 1457: 1453: 1450: 1448: 1444: 1439: 1432: 1427: 1425: 1420: 1418: 1413: 1412: 1409: 1402: 1398: 1397: 1392: 1391: 1387: 1385: 1382: 1380: 1377: 1374: 1370: 1367: 1365: 1361: 1358: 1356: 1352: 1349: 1347: 1343: 1340: 1337: 1334: 1331: 1328: 1324: 1319: 1318: 1314: 1305: 1299: 1295: 1291: 1287: 1280: 1277: 1272: 1266: 1262: 1258: 1254: 1247: 1244: 1239: 1235: 1231: 1227: 1223: 1219: 1215: 1211: 1204: 1201: 1189: 1185: 1179: 1176: 1171: 1167: 1163: 1159: 1155: 1151: 1144: 1141: 1136: 1129: 1126: 1113: 1107: 1104: 1097: 1095: 1093: 1089: 1085: 1080: 1076: 1068: 1066: 1014: 943: 936: 918: 916: 908: 899: 897: 895: 861: 847: 845: 843: 839: 835: 831: 826: 823: 820: 812: 810: 744: 732: 723:xs = e if ∃ys 640: 577: 559: 555: 552:More complex 547: 516: 491: 481: 477: 472: 470: 466: 462: 454: 448: 418: 411: 406: 404: 401: 400:integration. 399: 395: 391: 387: 383: 375: 371: 367: 364:Influenced by 362: 358: 354: 350: 346: 342: 338: 334: 331: 326: 322: 304: 300: 296: 293: 291: 287: 284: 280: 277: 275: 271: 268: 265: 263: 259: 256: 252: 248: 245: 243: 239: 235: 229: 223: 221: 217: 213: 199: 195: 192: 188: 184: 180: 176: 172: 169: 167: 163: 159: 157: 153: 149: 145: 142: 140: 136: 124: 121: 113: 102: 99: 95: 92: 88: 85: 81: 78: 74: 71: –  70: 66: 65:Find sources: 59: 53: 52: 48: 43:This article 41: 37: 32: 31: 26: 22: 21:Haskell Curry 2231: 2221: 2211: 2199: 2194: 2191: 2158: 2150: 2050: 2040: 2030: 2018: 2014: 2011: 1981:David Roundy 1961:Simon Marlow 1926:Richard Bird 1838: 1813: 1663: 1594: 1586: 1578: 1564: 1552: 1509: 1505: 1493: 1394: 1388: 1285: 1279: 1252: 1246: 1213: 1209: 1203: 1191:. Retrieved 1187: 1178: 1153: 1149: 1143: 1128: 1116:. Retrieved 1106: 1074: 1072: 1064: 1008: 937: 922: 914: 906: 903: 893: 887: 851: 840:strategy of 833: 829: 827: 824: 816: 798:where...free 791: 733: 714: 609: 551: 545: 514: 473: 469:side effects 458: 452: 422: 415: 402: 381: 380: 116: 107: 97: 90: 83: 76: 64: 44: 2106:mathematics 1991:Audrey Tang 1971:Erik Meijer 1946:John Hughes 1603:TidalCycles 1440:programming 1193:2 September 1118:14 November 1013:defined by 931:as well as 572:and a list 319:/curry-lang 313:.informatik 225:3.6.0  2249:Categories 1941:Paul Hudak 1678:QuickCheck 1098:References 1069:Strategies 925:0 ? 1 830:strategies 610:The type “ 461:confluence 144:functional 80:newspapers 47:references 2102:Namesakes 1886:Community 1847:SQream DB 1796:git-annex 1727:wxHaskell 1656:Libraries 1230:0004-5411 913:, called 813:Narrowing 351:target), 343:target), 315:.uni-kiel 166:Developer 110:July 2019 2128:Currying 1986:Joe Stoy 1634:Bluespec 1523:Dialects 1461:features 1447:Software 1369:Curry2Go 1238:47275506 1188:MVPS.net 1170:14578759 927:returns 425:double 1 297:3-clause 262:Platform 255:inferred 139:Paradigm 25:Currying 2192:Italics 2165:Haskell 2012:Italics 1840:Paradox 1802:Haddock 1778:Cardano 1752:Servant 1722:Fudgets 1547:Cryptol 1438:Haskell 1401:Haskell 1364:Haskell 731:= xs. 476:Haskell 445:1+2 = 3 441:1+1 = 2 394:Haskell 370:Haskell 359:target) 357:Haskell 302:Website 290:License 205: ( 94:scholar 1916:Arvind 1895:Eponym 1833:Pandoc 1828:LOLITA 1790:Ganeti 1733:xmonad 1672:Parsec 1588:Orwell 1355:Prolog 1300:  1267:  1236:  1228:  1168:  1045:insert 998:insert 968:insert 947:insert 915:choice 842:Prolog 612:List a 374:Prolog 341:Prolog 328:Major 309:.pages 267:x86-64 251:strong 247:static 96:  89:  82:  75:  67:  2159:Curry 2152:Brook 1815:House 1808:HaXml 1784:Darcs 1764:Yesod 1703:Stack 1697:Cabal 1639:(BSV) 1580:Ωmega 1573:Idris 1553:Curry 1495:Gofer 1360:KiCS2 1351:PAKCS 1234:S2CID 1166:S2CID 1084:KiCS2 819:bound 775:where 659:-> 656:-> 535:False 529:False 510:False 488:False 384:is a 382:Curry 353:KiCS2 337:PAKCS 307:curry 283:Linux 148:logic 133:Curry 101:JSTOR 87:books 2200:° = 2032:Book 2019:° = 1869:Book 1758:Snap 1628:Atom 1596:Pugs 1566:Hume 1535:Agda 1500:Hugs 1498:° → 1330:Smap 1298:ISBN 1265:ISBN 1226:ISSN 1195:2021 1120:2023 1054:perm 1024:perm 1018:perm 1011:perm 865:last 858:ys++ 854:last 787:free 748:last 721:last 602:List 584:List 581:data 566:x:xs 541:True 523:True 504:True 498:Bool 495:data 486:and 484:True 321:.org 207:1995 200:1995 73:news 1559:Elm 1511:Yhc 1508:° ( 1342:MCC 1290:doi 1257:doi 1218:doi 1158:doi 794:=:= 763:=:= 622:... 576:: 532:not 520:not 429:1+1 345:mcc 317:.de 311:.ps 295:BSD 49:to 2251:: 2104:: 1609:Ur 1482:° 1373:Go 1296:. 1263:. 1232:. 1224:. 1214:47 1212:. 1186:. 1164:. 1154:53 1152:. 1057:xs 1036:xs 1004:ys 983:ys 965:ys 953:ys 890:++ 874:++ 871:ys 844:. 804:c 778:ys 766:xs 760:++ 757:ys 751:xs 737:++ 729:++ 727:ys 717:++ 710:ys 707:++ 704:xs 692:ys 689:++ 683:xs 671:ys 665:ys 662:++ 653::: 647:++ 637:++ 633:++ 626:xn 618:x2 574:xs 443:, 372:, 281:: 274:OS 253:, 249:, 146:, 60:. 2167:° 2161:° 2155:° 2108:, 2086:e 2079:t 2072:v 1843:° 1835:° 1824:° 1818:° 1810:° 1804:° 1798:° 1792:° 1786:° 1780:° 1766:° 1760:° 1754:° 1735:° 1729:° 1705:° 1699:° 1680:° 1674:° 1668:° 1630:° 1611:° 1605:° 1599:° 1591:° 1583:° 1575:° 1569:° 1561:° 1555:° 1549:° 1543:° 1537:° 1514:) 1502:° 1488:° 1476:° 1463:) 1459:( 1430:e 1423:t 1416:v 1346:C 1306:. 1292:: 1273:. 1259:: 1240:. 1220:: 1197:. 1172:. 1160:: 1137:. 1122:. 1060:) 1051:( 1048:x 1042:= 1039:) 1033:: 1030:x 1027:( 1021:= 1001:x 995:: 992:y 989:= 986:) 980:: 977:y 974:( 971:x 962:: 959:x 956:= 950:x 940:? 933:1 929:0 911:? 883:e 880:= 877:) 868:( 806:= 802:| 784:e 781:, 772:e 769:= 754:| 741:3 725:: 701:: 698:x 695:= 686:) 680:: 677:x 674:( 668:= 650:) 644:( 631:“ 628:: 624:: 620:: 616:: 605:a 599:: 596:a 593:| 590:= 587:a 570:x 562:a 538:= 526:= 507:| 501:= 437:+ 433:2 355:( 349:C 347:( 339:( 209:) 123:) 117:( 112:) 108:( 98:· 91:· 84:· 77:· 54:. 27:.

Index

Haskell Curry
Currying

references
primary sources
secondary or tertiary sources
"Curry" programming language
news
newspapers
books
scholar
JSTOR
Learn how and when to remove this message
Paradigm
functional
logic
Designed by
Developer
Kiel University
Ludwig Maximilian University of Munich
University of Münster
Portland State University
Complutense University of Madrid
Technical University of Madrid
Stable release
Edit this on Wikidata
Typing discipline
static
strong
inferred

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