CINXE.COM
Brontekst bekijken van Haskell (programmeertaal) - Wikipedia
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-disabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-not-available" lang="nl" dir="ltr"> <head> <meta charset="UTF-8"> <title>Brontekst bekijken van Haskell (programmeertaal) - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-disabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-not-available";var cookie=document.cookie.match(/(?:^|; )nlwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":true,"wgSeparatorTransformTable":[",\t.",".\t,"],"wgDigitTransformTable":["",""], "wgDefaultDateFormat":"dmy","wgMonthNames":["","januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"wgRequestId":"e599859b-2534-4e57-948f-31139a84d23e","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Haskell_(programmeertaal)","wgTitle":"Haskell (programmeertaal)","wgCurRevisionId":68014119,"wgRevisionId":0,"wgArticleId":34979,"wgIsArticle":false,"wgIsRedirect":false,"wgAction":"edit","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgPageViewLanguage":"nl","wgPageContentLanguage":"nl","wgPageContentModel":"wikitext","wgRelevantPageName":"Haskell_(programmeertaal)","wgRelevantArticleId":34979,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":true,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor": {"pageLanguageCode":"nl","pageLanguageDir":"ltr","pageVariantFallbacks":"nl"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":20000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","skins.vector.search.codex.styles":"ready" ,"skins.vector.styles":"ready","skins.vector.icons":"ready","ext.charinsert.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["mediawiki.action.edit.collapsibleFooter","site","mediawiki.page.ready","skins.vector.js","ext.centralNotice.geoIP","ext.charinsert","ext.gadget.Direct-link-to-Commons","ext.gadget.ProtectionTemplates","ext.gadget.InterProjectLinks","ext.gadget.hoofdbetekenis-titelwijziging","ext.gadget.switcher","ext.gadget.OpenStreetMapFrame","ext.gadget.subpages","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession", "wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=nl&modules=ext.charinsert.styles%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediaBadges%7Cext.wikimediamessages.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=nl&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=nl&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="noindex,nofollow,max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Haskell-Logo.svg/1200px-Haskell-Logo.svg.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="846"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Haskell-Logo.svg/800px-Haskell-Logo.svg.png"> <meta property="og:image:width" content="800"> <meta property="og:image:height" content="564"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Haskell-Logo.svg/640px-Haskell-Logo.svg.png"> <meta property="og:image:width" content="640"> <meta property="og:image:height" content="451"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Brontekst bekijken van Haskell (programmeertaal) - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//nl.m.wikipedia.org/wiki/Haskell_(programmeertaal)"> <link rel="alternate" type="application/x-wiki" title="Bewerken" href="/w/index.php?title=Haskell_(programmeertaal)&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (nl)"> <link rel="EditURI" type="application/rsd+xml" href="//nl.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://nl.wikipedia.org/wiki/Haskell_(programmeertaal)"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.nl"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom-feed" href="/w/index.php?title=Speciaal:RecenteWijzigingen&feed=atom"> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Haskell_programmeertaal rootpage-Haskell_programmeertaal skin-vector-2022 action-edit"><a class="mw-jump-link" href="#bodyContent">Naar inhoud springen</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Hoofdmenu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Hoofdmenu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Hoofdmenu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">naar zijbalk verplaatsen</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">verbergen</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigatie </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage" class="mw-list-item"><a href="/wiki/Hoofdpagina" title="Naar de hoofdpagina gaan [z]" accesskey="z"><span>Hoofdpagina</span></a></li><li id="n-zoekartikel" class="mw-list-item"><a href="/wiki/Portaal:Navigatie"><span>Vind een artikel</span></a></li><li id="n-today" class="mw-list-item"><a href="/wiki/25_november"><span>Vandaag</span></a></li><li id="n-Etalage" class="mw-list-item"><a href="/wiki/Wikipedia:Etalage"><span>Etalage</span></a></li><li id="n-categories" class="mw-list-item"><a href="/wiki/Categorie:Alles"><span>Categorieën</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Speciaal:RecenteWijzigingen" title="Een lijst met recente wijzigingen in deze wiki. [r]" accesskey="r"><span>Recente wijzigingen</span></a></li><li id="n-newpages" class="mw-list-item"><a href="/wiki/Speciaal:NieuwePaginas"><span>Nieuwe artikelen</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Speciaal:Willekeurig" title="Een willekeurige pagina bekijken [x]" accesskey="x"><span>Willekeurige pagina</span></a></li> </ul> </div> </div> <div id="p-navigation2" class="vector-menu mw-portlet mw-portlet-navigation2" > <div class="vector-menu-heading"> Informatie </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-portal" class="mw-list-item"><a href="/wiki/Portaal:Gebruikersportaal" title="Informatie over het project: wat u kunt doen, waar u dingen kunt vinden"><span>Gebruikersportaal</span></a></li><li id="n-Snelcursus" class="mw-list-item"><a href="/wiki/Wikipedia:Snelcursus"><span>Snelcursus</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/Portaal:Hulp_en_beheer" title="Hulpinformatie over deze wiki"><span>Hulp en contact</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Hoofdpagina" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="de vrije encyclopedie" src="/static/images/mobile/copyright/wikipedia-tagline-nl.svg" width="120" height="13" style="width: 7.5em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Speciaal:Zoeken" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Doorzoek Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Zoeken</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Doorzoek Wikipedia" aria-label="Doorzoek Wikipedia" autocapitalize="sentences" title="Doorzoek Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Speciaal:Zoeken"> </div> <button class="cdx-button cdx-search-input__end-button">Zoeken</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Persoonlijke hulpmiddelen"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Uiterlijk"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="De lettergrootte, breedte en kleur van de pagina wijzigen" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Uiterlijk" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Uiterlijk</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_nl.wikipedia.org&uselang=nl" class=""><span>Doneren</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Speciaal:GebruikerAanmaken&returnto=Haskell+%28programmeertaal%29&returntoquery=action%3Dedit" title="Registreer u vooral en meld u aan. Dit is echter niet verplicht." class=""><span>Account aanmaken</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Speciaal:Aanmelden&returnto=Haskell+%28programmeertaal%29&returntoquery=action%3Dedit" title="U wordt van harte uitgenodigd om aan te melden, maar dit is niet verplicht [o]" accesskey="o" class=""><span>Aanmelden</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Meer opties" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Persoonlijke hulpmiddelen" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Persoonlijke hulpmiddelen</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="Gebruikersmenu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_nl.wikipedia.org&uselang=nl"><span>Doneren</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Speciaal:GebruikerAanmaken&returnto=Haskell+%28programmeertaal%29&returntoquery=action%3Dedit" title="Registreer u vooral en meld u aan. Dit is echter niet verplicht."><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Account aanmaken</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Speciaal:Aanmelden&returnto=Haskell+%28programmeertaal%29&returntoquery=action%3Dedit" title="U wordt van harte uitgenodigd om aan te melden, maar dit is niet verplicht [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Aanmelden</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pagina's voor uitgelogde redacteuren <a href="/wiki/Help:Inleiding" aria-label="Meer leren over bewerken"><span>meer lezen</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Speciaal:MijnBijdragen" title="Bijdragen IP-adres [y]" accesskey="y"><span>Bijdragen</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Speciaal:MijnOverleg" title="Overlegpagina van de anonieme gebruiker van dit IP-adres [n]" accesskey="n"><span>Overleg</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <h1 id="firstHeading" class="firstHeading mw-first-heading">Brontekst bekijken van Haskell (programmeertaal)</h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Dit artikel bestaat alleen in deze taal. Het artikel in andere talen toevoegen." > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-0" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">Talen toevoegen</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> <div class="after-portlet after-portlet-lang"><span class="uls-after-portlet-link"></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Naamruimten"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Haskell_(programmeertaal)" title="Inhoudspagina bekijken [c]" accesskey="c"><span>Artikel</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Overleg:Haskell_(programmeertaal)" rel="discussion" title="Overleg over deze pagina [t]" accesskey="t"><span>Overleg</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Taalvariant wijzigen" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Nederlands</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Weergaven"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="vector-tab-noicon mw-list-item"><a href="/wiki/Haskell_(programmeertaal)"><span>Lezen</span></a></li><li id="ca-ve-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Haskell_(programmeertaal)&veaction=edit" title="Deze pagina bewerken [v]" accesskey="v"><span>Bewerken</span></a></li><li id="ca-edit" class="selected collapsible vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Haskell_(programmeertaal)&action=edit" title="Broncode van deze pagina bewerken"><span>Brontekst bewerken</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Haskell_(programmeertaal)&action=history" title="Eerdere versies van deze pagina [h]" accesskey="h"><span>Geschiedenis weergeven</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Paginahulpmiddelen"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Hulpmiddelen" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Hulpmiddelen</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Hulpmiddelen</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">naar zijbalk verplaatsen</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">verbergen</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="Meer opties" > <div class="vector-menu-heading"> Handelingen </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="vector-more-collapsible-item mw-list-item"><a href="/wiki/Haskell_(programmeertaal)"><span>Lezen</span></a></li><li id="ca-more-ve-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Haskell_(programmeertaal)&veaction=edit" title="Deze pagina bewerken [v]" accesskey="v"><span>Bewerken</span></a></li><li id="ca-more-edit" class="selected collapsible vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Haskell_(programmeertaal)&action=edit" title="Broncode van deze pagina bewerken [e]" accesskey="e"><span>Brontekst bewerken</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Haskell_(programmeertaal)&action=history"><span>Geschiedenis weergeven</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> Algemeen </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Speciaal:VerwijzingenNaarHier/Haskell_(programmeertaal)" title="Lijst met alle pagina's die naar deze pagina verwijzen [j]" accesskey="j"><span>Links naar deze pagina</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Speciaal:RecenteWijzigingenGelinkt/Haskell_(programmeertaal)" rel="nofollow" title="Recente wijzigingen in pagina's waar deze pagina naar verwijst [k]" accesskey="k"><span>Gerelateerde wijzigingen</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard?uselang=nl" title="Bestanden uploaden [u]" accesskey="u"><span>Bestand uploaden</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Speciaal:SpecialePaginas" title="Lijst met alle speciale pagina's [q]" accesskey="q"><span>Speciale pagina's</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Haskell_(programmeertaal)&action=info" title="Meer informatie over deze pagina"><span>Paginagegevens</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Speciaal:UrlShortener&url=https%3A%2F%2Fnl.wikipedia.org%2Fw%2Findex.php%3Ftitle%3DHaskell_%28programmeertaal%29%26action%3Dedit"><span>Verkorte URL verkrijgen</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Speciaal:QrCode&url=https%3A%2F%2Fnl.wikipedia.org%2Fw%2Findex.php%3Ftitle%3DHaskell_%28programmeertaal%29%26action%3Dedit"><span>QR-code downloaden</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In andere projecten </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q34010" title="Koppeling naar item in verbonden gegevensrepository [g]" accesskey="g"><span>Wikidata-item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Paginahulpmiddelen"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Uiterlijk"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Uiterlijk</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">naar zijbalk verplaatsen</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">verbergen</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> </div> <div id="contentSub"><div id="mw-content-subtitle">← <a href="/wiki/Haskell_(programmeertaal)" title="Haskell (programmeertaal)">Haskell (programmeertaal)</a></div></div> <div id="mw-content-text" class="mw-body-content"><p>U hebt geen toestemming om deze pagina te bewerken, want: </p> <ul class="permissions-errors"><li class="mw-permissionerror-blockedtext"><div style="border-top:3.5px solid #c71e1e; line-height: 1.4; text-align: left; font-size: 1.1em;"> <div style="height:.5em"></div>  <figure class="mw-halign-left" typeof="mw:File/Frameless"><a href="/wiki/Bestand:Cross_red_circle.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/c/cc/Cross_red_circle.svg/46px-Cross_red_circle.svg.png" decoding="async" width="46" height="46" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/c/cc/Cross_red_circle.svg/69px-Cross_red_circle.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/cc/Cross_red_circle.svg/92px-Cross_red_circle.svg.png 2x" data-file-width="512" data-file-height="512" /></a><figcaption></figcaption></figure> <big><b>U heeft geen bewerkingsrechten</b></big><br />De opgegeven reden van uw blokkering luidt: <b>Open proxy - <a href="/wiki/Wikipedia:Blockreason9" title="Wikipedia:Blockreason9">Nadere informatie</a>.</b> <div style="height:.5em"></div> <p><i>Indien u enkel Wikipedia wenst te lezen is dit van geen enkel belang. U heeft toegang tot alle aanwezige informatie.</i> </p><p>U klikte op een link om een pagina op Wikipedia te bewerken, hetzij om de tekst daarvan aan te passen, hetzij om een nieuw artikel aan te maken. U kunt dit (op dit moment) niet doen omdat u geblokkeerd bent. Als u Wikipedia enkel wenst te lezen mist u niets. </p> <ul><li><b>Niet aangemelde gebruiker:</b> indien u geen gebruik maakt van een <a href="/wiki/Help:Aanmelden" class="mw-redirect" title="Help:Aanmelden">gebruikersaccount</a> en u krijgt deze melding, dan is uw externe <a href="/wiki/IP-adres" title="IP-adres">IP-adres</a> geblokkeerd. Een IP-adres is een nummer waarmee uw computer op het internet kan worden geïdentificeerd. Dat van u is <b>8.222.208.146</b>. Als er problemen zijn met anonieme gebruikers, zoals in het geval van vandalisme, wordt daarvan soms het IP-adres geblokkeerd. <b>Dit is niet noodzakelijkerwijs persoonlijk bedoeld.</b> Veel mensen delen hun IP-adres met andere gebruikers. Dit is bijna zeker het geval indien u via een school of bedrijf met het internet bent verbonden. Ongewenste bewerkingen van iemand anders kunnen helaas de reden zijn dat u nu geen bewerkingsrechten heeft. Ook kan het zijn dat uw IP-adres is geblokkeerd omdat u via een mobiele internetverbinding bewerkingen in Wikipedia wilt uitvoeren. Mobiele netwerken wijzen dynamische IP-adressen toe die om beveiligingsredenen standaard zijn geblokkeerd voor anonieme bewerkingen. <ul><li>Oplossing: sommige blokkeringen worden opgelegd voor een korte periode. Kijk in <span class="plainlinks"><a class="external text" href="https://nl.wikipedia.org/w/index.php?title=Speciaal:Ipblocklist&ip=8.222.208.146">het logboek</a></span> tot wanneer de blokkering loopt. U kunt daar ook zien welk type blokkering is opgelegd. Ziet u de vermelding <i>alleen anoniemen</i> staan, dan zult u wel bewerkingsrechten hebben indien u <a href="/wiki/Speciaal:Aanmelden" title="Speciaal:Aanmelden">inlogt</a> als een geregistreerde gebruiker. Ziet u ook de vermelding <i>aanmaken account geblokkeerd</i>, dan kunt u via uw huidige internetverbinding geen account aanmaken. Is deze laatste vermelding er echter niet, dan kunt u gewoon een <span class="plainlinks"><a class="external text" href="https://nl.wikipedia.org/w/index.php?title=Speciaal:Userlogin&type=signup">gebruikersaccount aanmaken</a></span>. Informatie over andere oplossingen vindt u op de pagina <span class="plainlinks"><a class="external text" href="https://nl.wikimedia.org/wiki/Help:Oplossingen_voor_geblokkeerde_gebruikers">Oplossingen voor geblokkeerde gebruikers</a></span>.</li></ul></li></ul> <ul><li><b>Geregistreerde gebruiker:</b> uw gebruikersaccount kan geblokkeerd zijn. Als u niet weet waarom u geblokkeerd bent, kijk dan op uw overlegpagina. Mogelijk vindt u daar een toelichting. Ook kunt u tijdens een blokkade uw overlegpagina blijven bewerken en kunt u daar vragen stellen over de reden van de blokkade; tenzij u deze mogelijkheid expliciet is ontnomen.</li></ul> <p><i>Voor verdere vragen kunt u <a href="/wiki/Speciaal:Contactpagina" title="Speciaal:Contactpagina">contact opnemen</a> met het e-mailteam van de Nederlandstalige Wikipedia. Als u een geregistreerde gebruiker bent, vermeld dan ook een link naar uw gebruikerspagina.</i> </p> </div></li><li class="mw-permissionerror-globalblocking-blockedtext-range"><b>Uw IP-adres bevindt zich in een bereik dat <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/Global_blocks" class="extiw" title="m:Special:MyLanguage/Global blocks">op alle wiki’s van de Wikimedia Foundation geblokkeerd is</a>.</b> <p>Deze blokkade is ingesteld door <a href="/wiki/Gebruiker:Jon_Kolbert" title="Gebruiker:Jon Kolbert">Jon Kolbert</a>. De opgegeven reden is <i><a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/NOP" class="extiw" title="m:Special:MyLanguage/NOP">Open proxy/Webhost</a>: See the <a href="https://meta.wikimedia.org/wiki/WM:OP/H" class="extiw" title="m:WM:OP/H">help page</a> if you are affected </i>. </p> <ul><li>Aanvang blokkade: 27 aug 2023 16:12</li> <li>Einde blokkade: 27 aug 2028 16:12</li></ul> <p>Uw huidige IP-adres is 8.222.208.146. Het geblokkeerde bereik is 8.222.128.0/17. </p><p>Vermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert. Als u denkt dat u per abuis bent geblokkeerd, kunt u aanvullende informatie en instructies vinden in het algemene beleid <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/No_open_proxies" class="extiw" title="m:Special:MyLanguage/No open proxies">Geen open proxy’s</a>. </p> Anders kunt u om de blokkering bespreken <a href="https://meta.wikimedia.org/wiki/Steward_requests/Global" class="extiw" title="m:Steward requests/Global">een verzoek om beoordeling op Meta-Wiki plaatsen</a>. U kunt ook een e-mail sturen naar de <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/VRT" class="extiw" title="m:Special:MyLanguage/VRT">VRT</a>-wachtrij van de <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/Stewards" class="extiw" title="m:Special:MyLanguage/Stewards">stewards</a> op <kbd>stewards@wikimedia.org</kbd> met daarin alle bovenstaande gegevens.</li></ul><hr /> <p>U kunt de brontekst van deze pagina bekijken en kopiëren. </p><textarea readonly="" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" class="mw-editfont-monospace" lang="nl" dir="ltr" name="wpTextbox1">{{Infobox programmeertaal | naam = Haskell | logo = Haskell-Logo.svg | extensies = .hs, .lhs | paradigma = puur [[Functioneel programmeren|functioneel]] | jaar = 1990 | ontwerper = | ontwikkelaar = [[Simon Peyton Jones]], [[Paul Hudak]], Philip Wadler en anderen | versie = Haskell 2010 (juli 2010) | typesystem = statisch, sterk, ''inferred'' | implementaties = [[Glasgow Haskell Compiler|GHC]], [[Hugs]] en anderen | dialecten = [[Helium (Haskell)|Helium]], [[Gofer]] | beinvloed = [[Lisp (programmeertaal)|Lisp]], [[APL (programmeertaal)|APL]], [[Hope (programmeertaal)|Hope]], [[Miranda (programmeertaal)|Miranda]], [[ML (programmeertaal)|ML]], [[Id (programmeertaal)|Id]] | invloed = [[C Sharp|C#]], [[Curry (programmeertaal)|Curry]], [[F Sharp|F#]], [[Language Integrated Query|LINQ]], [[Perl 6]], [[Python (programmeertaal)|Python]], [[Scala (programmeertaal)|Scala]] | besturingssysteem = [[Multiplatform]] | licentie = | website = https://haskell.org/ }} '''Haskell''' is een [[functioneel programmeren|functionele programmeertaal]] vernoemd naar de [[wiskunde|wiskundige]] [[Haskell Curry|Haskell Brooks Curry]]. == Geschiedenis == Aan Haskell wordt voornamelijk gewerkt aan de [[Universiteit van Glasgow]]. === Begin === Door het verschijnen van de programmeertaal Miranda in 1985 (uitgebracht door Research Software Ltd.) steeg de interesse in [[Luie evaluatie|luie]] [[Functioneel programmeren|functionele talen]]. Tegen 1987 waren er al een heleboel functionele talen in gebruik. Miranda was de meest verspreide taal, maar was [[propriëtaire software]]. Op de Internationale Conferentie over Functionele Talen in 1987 te [[Portland (Oregon)|Portland]] heerste consensus dat een [[open standaard]] voor dergelijke talen opgesteld moest worden. Het doel van de commissie was bestaande functionele consolideren tot een gemeenschappelijke taal die moest dienen als basis voor verder onderzoek naar functionele talen.<ref name=":0">{{Citeer boek|titel=Haskell 98 Language and Libraries|auteurlink=Simon Peyton Jones|voornaam=Simon Peyton|achternaam=Jones|taal=en|url=https://www.haskell.org/onlinereport/index.html|uitgever=Cambridge University Press|datum=december 2002|ISBN=9780521826143|hoofdstuk=Preface|archiefurl=https://web.archive.org/web/20230606145738/https://www.haskell.org/onlinereport/index.html|archiefdatum=2023-06-06}}</ref> === Haskell 1.0 tot 1.4 === De eerste versie van Haskell, ''Haskell 1.0'', is opgesteld in 1990. Het werk van de commissie resulteerde in reeks taaldefinities (1.0, 1.1, 1.2, 1.3 en 1.4).<ref>{{Citeer journal|auteur=Hudak, Paul|datum=16 april 2007|titel=A History of Haskell: Being Lazy With Class|journal=Proceedings of the Third ACM SIGPLAN Conference on History of Programming Languages (HOPL III)|pagina's=12–1–55|doi=10.1145/1238844.1238856|url=http://research.microsoft.com/~simonpj/papers/history-of-haskell/history.pdf|taal=en|medeauteurs=Hughes, John; Jones, Simon Peyton; Wadler, Philip}}</ref> === Haskell 98 === Eind 1997 resulteerde de reeks definities in Haskell 98, met als doel een stabiele, minimale, [[Portable software|draagbare]] versie van de taal en bijhorende standaard te publiceren. De commissie verwachtte en maakte het expliciet mogelijk om extensies toe te voegen aan de taal via ''experimentele functies''.<ref name=":0" /> In februari 1999 werd de standaard voor Haskell 98 gepubliceerd als ''The Haskell 98 Report''. In januari 2003 werd een herziene editie gepubliceerd als ''Haskell 98 Language and Libraries: The Revised Report''.<ref name=":0" /> De taal blijft zich sterk ontwikkelen. De Glasgow Haskell Compiler is [[de facto]] de standaardimplementatie.<ref>{{Citeer web|url=https://wiki.haskell.org/Implementations|titel=Implementations - HaskellWiki|bezochtdatum=4 augustus 2019|auteur=|achternaam=|voornaam=|datum=17 februari 2017|werk=|uitgever=|taal=en|archiefurl=https://web.archive.org/web/20190602212529/https://wiki.haskell.org/Implementations|archiefdatum=2019-06-02}}</ref> === Haskell 2010 === Begin 2006 werden de eerste stappen gezet om een opvolger voor Haskell 98 te maken, onder de naam ''Haskell Prime''.<ref>{{Citeer web|url=https://prime.haskell.org/|titel=Haskell Prime|bezochtdatum=4 augustus 2019|auteur=|achternaam=|voornaam=|datum=29 april 2016|uitgever=|taal=en|archiefurl=https://web.archive.org/web/20160220103915/https://prime.haskell.org/|archiefdatum=20 februari 2016|dodeurl=ja|dodelink=ja}}</ref> Het doel was incrementele updates te produceren, met hoogstens één nieuwe versie per jaar. De eerste revisie, Haskell 2010, is aangekondigd in november 2009 en gepubliceerd in juli 2010.<ref>{{Citeer web|url=https://mail.haskell.org/pipermail/haskell/2009-November/021750.html|titel=Announcing Haskell 2010|bezochtdatum=4 augustus 2019|achternaam=Marlow|voornaam=Simon|datum=24 november 2009|uitgever=|taal=en|archiefurl=https://web.archive.org/web/20190412221851/https://mail.haskell.org/pipermail/haskell/2009-November/021750.html|archiefdatum=2019-04-12}}</ref> Haskell 2010 is een incrementele update, die verschillende vaak gebruikte en niet-controversiële functies toevoegt, die voorheen via compilervlaggen aangezet moesten worden: * Hiërarchische modulenamen., bv. <code>Data.List</code> in plaats van <code>List</code>. Deze functionaliteit is oorspronkelijk toegevoegd aan Haskell 98 middels een addendum en wordt universeel gebruikt. * Met de foreign function interface is het mogelijk om andere programmeertalen aan te spreken. In de standaard zijn enkel bindingen naar [[C (programmeertaal)|C]] gedefinieerd, maar het ontwerp laat andere talen toe. Ook deze functie was oorspronkelijk een addendum bij Haskell 98. * De zogenaamde <math>n+k</math>-patronen zijn niet meer toegelaten. * De regels omtrent de [[type-inferentie]] zijn versoepeld teneinde meer mogelijkheden te geven aan programma's. * Enkele syntaxisproblemen zijn verholpen. * De pragma <code>LANGUAGE</code> is toegevoegd om beter met extensies te kunnen werken. == Implementaties == Parallel aan de ontwikkeling van de theoretische Haskell-taal is er een aantal werkomgevingen voor Haskell ontwikkeld. De bekendste hiervan zijn de [[Hugs]]- en Gofer-systemen en de [[Glasgow Haskell Compiler]], die alle gratis beschikbaar worden gesteld door de universitaire teams die eraan werken. Speciaal voor het leren van Haskell heeft men aan de [[Universiteit Utrecht|Universiteit van Utrecht]] [[Helium (Haskell)|Helium]] ontwikkeld waarbij men aandacht heeft besteed aan de duidelijkheid van de foutmeldingen. In [[Nijmegen]] is de programmeertaal [[Clean (programmeertaal)|Clean]] ontwikkeld, die zeer sterk op Haskell lijkt, maar de programmeur meer controle over de luie evaluatie geeft. == Functionele basis == In tegenstelling tot vele bekende [[programmeertaal|programmeertalen]] zoals [[C (programmeertaal)|C]], [[C++]] en [[Java (programmeertaal)|Java]] is Haskell geen [[imperatief programmeren|imperatieve taal]], maar een [[functioneel programmeren|functionele taal]]. Dat wil zeggen dat de taal niet gebaseerd is op het [[turingmachine]]-model van berekening, maar op het [[Lambdacalculus]]model van [[Alonzo Church]] waarin het toepassen van [[functie (wiskunde)|functies]] op termen en termenreductie de basis is van berekening. Haskell is een [[Luie evaluatie|luie]] ("lazy"), puur functionele taal. Puur functioneel zijn wil zeggen dat erin gedefinieerde functies geen neveneffecten kunnen vertonen. Voorbeelden van niet-pure functionele programmeertalen zijn [[ML (programmeertaal)|Standaard ML]] en [[Scheme]]. Een luie functionele taal gebruikt [[luie evaluatie]] om te voorkomen dat resultaten die niet gebruikt worden, berekend worden. Hoewel het niet door iedereen als een intuïtieve eigenschap wordt aangezien, wordt luie evaluatie beschouwd als een manier om meer modularisatie te kunnen realiseren. De programmeertaal is sterk en statisch getypeerd (typefouten kunnen tijdens de uitvoering van een programma niet optreden), en steunt sterk op [[type-inferentie]] (meestal kunnen de types van functies en variabelen door de compiler ontdekt worden). Het typesysteem is zeer uitgebreid, en ondersteunt het concept van klassen van types, waarbij deze klassen van elkaar afgeleid kunnen worden. == Voorbeelden == === [[Hello world (programma)|Hello world]] === <syntaxhighlight lang="haskell"> module Main (main) where -- niet nodig bij interpreter, standaard bij modulebestanden main :: IO () -- optioneel, de compiler kan dit bepalen main = putStrLn "Hello, World!" </syntaxhighlight> === Faculteit === De onderstaande functie berekent de [[Faculteit (wiskunde)|faculteit]] van een getal. De functie is voor negatieve waarden ongedefinieerd. Ze is gedefinieerd op enkele verschillende manieren: <syntaxhighlight lang="haskell"> -- Type-annotatie (optioneel, zelfde voor elke implementatie) faculteit :: (Integral a) => a -> a -- Middels recursie (met de "ifthenelse"-expressie) faculteit n = if n < 2 then 1 else n * faculteit (n - 1) -- Met recursie (met patroonvergelijking) faculteit 0 = 1 faculteit n = n * faculteit (n - 1) -- Met recursie (met guards) faculteit n | n < 2 = 1 | otherwise = n * faculteit (n - 1) -- Met een lijst en de "product"-functie faculteit n = product [1..n] -- Met fold (implementeert "product") faculteit n = foldl (*) 1 [1..n] -- In "point-free"-stijl faculteit = foldr (*) 1 . enumFromTo 1 </syntaxhighlight> === Invoegen in een lijst === De volgende functie voegt een getal in een lijst in, op volgorde van klein naar groot: <syntaxhighlight lang="haskell"> insert :: Int -> [Int] -> [Int] insert a [] = [a] insert a list@(x:xs) | a <= x = a : list | a > x = x : insert a xs </syntaxhighlight> Bij het invoegen van een getal zijn er twee gevallen te onderscheiden: het invoegen van een getal in een lege lijst en in een lijst met één of meerdere getallen. Het invoegen in de lege lijst is eenvoudig want dat is een lijst met dat getal. Bij het invoegen van een getal in een gevulde lijst kijken we naar het eerste getal, ''x'', en de rest, ''xs''. Als het in te voegen getal kleiner of gelijk is aan het eerste getal, dan zetten we het getal op kop van de hele lijst. Als het getal groter is dan het eerste getal dan nemen we het eerste element en voegen we het getal in de rest van de lijst in. Op deze manier wordt de lijst doorlopen totdat de plek is gevonden waar het getal neergezet kan worden. === Hogere-ordefuncties en luie evaluatie === In Haskell kan men [[hogere-ordefunctie]]s gebruiken, dit zijn functies die een of meerdere functie(s) als argument meekrijgen of die een functie opleveren. Voorbeelden hiervan zijn <code>[[Map (hogere-ordefunctie)|map]]</code>, <code>[[Filter (hogere-ordefunctie)|filter]]</code> en <code>[[fold]]</code>. De functie <code>filter</code> krijgt bijvoorbeeld een functie mee (een predicaat) en een lijst. Deze functie levert een lijst op waarin alleen de elementen zitten uit de gegeven lijst die aan het predicaat voldoen. Bijvoorbeeld: <syntaxhighlight lang="haskell"> filter even [0..] </syntaxhighlight> Het bovenstaande levert een oneindige lijst op met even getallen (formeler: alle elementen uit de lijst [0, 1, 2, ..] waarvoor de functie <code>even</code> de waarde <code>True</code> teruggeeft). Het feit dat deze lijst oneindig is, is geen probleem, want de lijst hoeft, vanwege het feit dat Haskell luie evaluatie toepast, alleen maar opgebouwd te worden indien nodig. Zo kan men schrijven: <syntaxhighlight lang="haskell"> take 10 (filter isPriem [1..]) </syntaxhighlight> De functie <code>take</code> levert de eerste n elementen van een lijst op. Als men de functie <code>isPriem</code> heeft gedefinieerd (die voor een getal bepaalt of het een [[priemgetal]] is) dan levert het bovenstaande de eerste 10 priemgetallen op. == Gebruik == Een greep uit de applicaties die geschreven zijn in of gebruik maken van Haskell: * [[Darcs]], een [[versiebeheersysteem]], is geschreven in Haskell.<ref>{{Citeer web|url=http://darcs.net/|titel=Darcs - FrontPage|bezochtdatum=4 augustus 2019|auteur=|achternaam=|voornaam=|datum=|uitgever=|taal=en}}</ref> * Xmonad is een [[windowmanager]] voor het [[X Window System]], geschreven in Haskell.<ref>{{Citeer web|url=https://xmonad.org/|titel=xmonad {{!}} the tiling window manager that rocks|bezochtdatum=4 augustus 2019|auteur=|achternaam=|voornaam=|datum=|uitgever=|taal=en|archiefurl=https://web.archive.org/web/20190902185150/https://xmonad.org/|archiefdatum=2019-09-02}}</ref> * git-annex is een hulpmiddel voor [[Git (software)|git]] om met grote bestanden te werken.<ref>{{Citeer web|url=http://git-annex.branchable.com/|titel=git-annex|bezochtdatum=4 augustus 2019|auteur=|achternaam=|voornaam=|datum=29 december 2017|uitgever=|taal=en}}</ref> * Pandoc, een programma om documenten te converteren tussen verschillende formaten.<ref>{{Citeer web|url=https://github.com/jgm/pandoc|titel=Pandoc|bezochtdatum=4 augustus 2019|auteur=|achternaam=MacFarlane|voornaam=John|datum=12 juni 2019|uitgever=|taal=en|archiefurl=https://web.archive.org/web/20190921223952/https://github.com/jgm/pandoc/|archiefdatum=2019-09-21}}</ref> * [[Facebook]] gebruikt Haskell in zijn anti-spamprogramma's.<ref>{{Citeer web|url=https://www.wired.com/2015/09/facebooks-new-anti-spam-system-hints-future-coding/|titel=Facebook's New Spam-Killer Hints at the Future of Coding|bezochtdatum=4 augustus 2019|achternaam=Metz|voornaam=Cade|datum=1 september 2019|uitgever=[[Wired]]|taal=en|archiefurl=https://web.archive.org/web/20190716080139/https://www.wired.com/2015/09/facebooks-new-anti-spam-system-hints-future-coding/|archiefdatum=2019-07-16}}</ref> == Kritiek == In 2002 en 2003 bespraken respectievelijk Jan-Willem Maessen en [[Simon Peyton Jones]] problemen geassocieerd met luie evaluatie. Naast de praktische overwegingen, zoals betere performantie, maakte luie evaluatie het moeilijker voor programmeurs om over de code te redeneren.<ref>{{Citeer journal|auteur=Maessen, Jan-Willem|datum=2002|titel=Eager Haskell: Resource-bounded Execution Yields Efficient Iteration|journal=Proceedings of the 2002 ACM SIGPLAN Workshop on Haskell|pagina's=38-50|uitgever=Association for Computing Machinery|pmid=|doi=10.1145/581690.581694|url=https://dl.acm.org/citation.cfm?id=581694|taal=en|bezochtdatum=}}</ref><ref>{{Citeer web|url=https://www.microsoft.com/en-us/research/publication/wearing-hair-shirt-retrospective-haskell-2003/|titel=Wearing the hair shirt: a retrospective on Haskell|bezochtdatum=4 augustus 2019|achternaam=Jones|voornaam=Simon Peyton|datum=januari 2003|uitgever=Microsoft Research|taal=en|archiefurl=https://web.archive.org/web/20190804141054/https://www.microsoft.com/en-us/research/publication/wearing-hair-shirt-retrospective-haskell-2003/|archiefdatum=2019-08-04}}</ref> Anderen observeerden dat Haskell niet eenvoudig is om te leren voor beginners:<ref>{{Citeer journal|auteur=Heeren, Bastiaan|datum=augustus 2003|titel=Helium, for Learning Haskell|journal=Proceedings of the 2003 ACM SIGPLAN Workshop on Haskell|pagina's=62-71|uitgever=Association for Computing Machinery|doi=10.1145/871895.871902|url=http://www.open.ou.nl/bhr/heeren-helium.pdf|taal=|bezochtdatum=|medeauteurs=Leijen, Daan; IJzendoorn, Arjan van|archiefurl=https://web.archive.org/web/20220122010312/http://www.open.ou.nl/bhr/heeren-helium.pdf|archiefdatum=2022-01-22}}</ref> <blockquote>The subtle syntax and sophisticated type system of Haskell are a double edged sword – highly appreciated by experienced programmers but also a source of frustration among beginners, since the generality of Haskell often leads to cryptic error messages.</blockquote>Dit was ook een van de redenen om [[Helium (Haskell)|Helium]] te maken. == Gerelateerde talen == [[Clean (programmeertaal)|Clean]] is een nauw verwante, maar iets oudere taal van Haskell. Een reeks talen die geïnspireerd zijn door Haskell, maar met verschillend typesysteem, zijn o.a.: * [[Agda]], een functionele taal met dependent types. * [[Idris (programmeertaal)|Idris]], een generieke functionele taal, ontwikkeld aan de [[universiteit van St Andrews]]. * [[Epigram (programmeertaal)|Epigram]], een functionele taal, gebruikt voor het bewijzen van eigenschappen van programma's. * [[Cayenne (programmeertaal)|Cayenne]], een functionele taal met dependent types. * Ωmega, een [[interpreter]] gelijkaardig aan [[Hugs]]. * Elm, een functionele taal, bedoeld om [[Webapplicatie|webapplicaties]] mee te maken. == Verder lezen == * {{nl}}[http://www.staff.science.uu.nl/~hage0101/FP-elec.pdf Functional Programming] (pdf). Dit is het collegedictaat van het vak ''Functioneel Programmeren'' aan de [[Universiteit Utrecht]] (zie [http://www.cs.uu.nl/docs/vakken/fp/ Bachelor Course on Functional Programming] voor meer informatie). == Externe links == * {{en}}[https://www.haskell.org De Haskell pagina] * {{en}}[https://www.haskell.org/onlinereport/haskell2010/ Het Haskell 2010 Language Report] - Over de taal zelf en haar bibliotheken * {{en}}[http://research.microsoft.com/~simonpj/papers/history-of-haskell/history.pdf A History of Haskell: being lazy with class] - Geschiedenis van Haskell * {{en}}[http://www.cs.nott.ac.uk/~gmh//faq.html De FAQ van Usenet nieuwsgroep comp.lang.functional] * {{en}}[https://web.archive.org/web/20050910025440/http://www.md.chalmers.se/~rjmh/Papers/whyfp.html Why Functional Programming Matters] - Een paper door John Hughes die o.a. de voordelen van lazy evaluatie beschrijft. {{Appendix}}{{Navigatie programmeertalen}} [[Categorie:Haskell| ]] [[Categorie:Functionele programmeertaal]] </textarea><div class="templatesUsed"><div class="mw-templatesUsedExplanation"><p>Op deze pagina gebruikte sjablonen: </p></div><ul> <li><a href="/wiki/Sjabloon:Appendix" title="Sjabloon:Appendix">Sjabloon:Appendix</a> (<a href="/w/index.php?title=Sjabloon:Appendix&action=edit" title="Sjabloon:Appendix">bekijk bron</a>) (uitgebreid beveiligd)</li><li><a href="/wiki/Sjabloon:Aut" title="Sjabloon:Aut">Sjabloon:Aut</a> (<a href="/w/index.php?title=Sjabloon:Aut&action=edit" title="Sjabloon:Aut">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:Bewerklinks" title="Sjabloon:Bewerklinks">Sjabloon:Bewerklinks</a> (<a href="/w/index.php?title=Sjabloon:Bewerklinks&action=edit" title="Sjabloon:Bewerklinks">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:Citeer_boek" title="Sjabloon:Citeer boek">Sjabloon:Citeer boek</a> (<a href="/w/index.php?title=Sjabloon:Citeer_boek&action=edit" title="Sjabloon:Citeer boek">bekijk bron</a>) (uitgebreid beveiligd)</li><li><a href="/wiki/Sjabloon:Citeer_journal" title="Sjabloon:Citeer journal">Sjabloon:Citeer journal</a> (<a href="/w/index.php?title=Sjabloon:Citeer_journal&action=edit" title="Sjabloon:Citeer journal">bewerken</a>) </li><li><a href="/wiki/Sjabloon:Citeer_web" title="Sjabloon:Citeer web">Sjabloon:Citeer web</a> (<a href="/w/index.php?title=Sjabloon:Citeer_web&action=edit" title="Sjabloon:Citeer web">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:Citeerslotjes" title="Sjabloon:Citeerslotjes">Sjabloon:Citeerslotjes</a> (<a href="/w/index.php?title=Sjabloon:Citeerslotjes&action=edit" title="Sjabloon:Citeerslotjes">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:En" class="mw-redirect" title="Sjabloon:En">Sjabloon:En</a> (<a href="/w/index.php?title=Sjabloon:En&action=edit" class="mw-redirect" title="Sjabloon:En">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:ISBN" title="Sjabloon:ISBN">Sjabloon:ISBN</a> (<a href="/w/index.php?title=Sjabloon:ISBN&action=edit" title="Sjabloon:ISBN">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:Infobox_generiek" title="Sjabloon:Infobox generiek">Sjabloon:Infobox generiek</a> (<a href="/w/index.php?title=Sjabloon:Infobox_generiek&action=edit" title="Sjabloon:Infobox generiek">bekijk bron</a>) (beveiligd)</li><li><a href="/wiki/Sjabloon:Infobox_programmeertaal" title="Sjabloon:Infobox programmeertaal">Sjabloon:Infobox programmeertaal</a> (<a href="/w/index.php?title=Sjabloon:Infobox_programmeertaal&action=edit" title="Sjabloon:Infobox programmeertaal">bewerken</a>) </li><li><a href="/wiki/Sjabloon:Navigatie" title="Sjabloon:Navigatie">Sjabloon:Navigatie</a> (<a href="/w/index.php?title=Sjabloon:Navigatie&action=edit" title="Sjabloon:Navigatie">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:Navigatie/styles.css" title="Sjabloon:Navigatie/styles.css">Sjabloon:Navigatie/styles.css</a> (<a href="/w/index.php?title=Sjabloon:Navigatie/styles.css&action=edit" title="Sjabloon:Navigatie/styles.css">bekijk bron</a>) (uitgebreid beveiligd)</li><li><a href="/wiki/Sjabloon:Navigatie_programmeertalen" title="Sjabloon:Navigatie programmeertalen">Sjabloon:Navigatie programmeertalen</a> (<a href="/w/index.php?title=Sjabloon:Navigatie_programmeertalen&action=edit" title="Sjabloon:Navigatie programmeertalen">bewerken</a>) </li><li><a href="/wiki/Sjabloon:Nl" class="mw-redirect" title="Sjabloon:Nl">Sjabloon:Nl</a> (<a href="/w/index.php?title=Sjabloon:Nl&action=edit" class="mw-redirect" title="Sjabloon:Nl">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:Nowrap" title="Sjabloon:Nowrap">Sjabloon:Nowrap</a> (<a href="/w/index.php?title=Sjabloon:Nowrap&action=edit" title="Sjabloon:Nowrap">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:PAGENAMEBASE" title="Sjabloon:PAGENAMEBASE">Sjabloon:PAGENAMEBASE</a> (<a href="/w/index.php?title=Sjabloon:PAGENAMEBASE&action=edit" title="Sjabloon:PAGENAMEBASE">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:References" title="Sjabloon:References">Sjabloon:References</a> (<a href="/w/index.php?title=Sjabloon:References&action=edit" title="Sjabloon:References">bekijk bron</a>) (uitgebreid beveiligd)</li><li><a href="/wiki/Sjabloon:Sfnref" title="Sjabloon:Sfnref">Sjabloon:Sfnref</a> (<a href="/w/index.php?title=Sjabloon:Sfnref&action=edit" title="Sjabloon:Sfnref">bekijk bron</a>) (uitgebreid beveiligd)</li><li><a href="/wiki/Sjabloon:Taal-en" title="Sjabloon:Taal-en">Sjabloon:Taal-en</a> (<a href="/w/index.php?title=Sjabloon:Taal-en&action=edit" title="Sjabloon:Taal-en">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:Taal-nl" title="Sjabloon:Taal-nl">Sjabloon:Taal-nl</a> (<a href="/w/index.php?title=Sjabloon:Taal-nl&action=edit" title="Sjabloon:Taal-nl">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:Taalaanduiding" title="Sjabloon:Taalaanduiding">Sjabloon:Taalaanduiding</a> (<a href="/w/index.php?title=Sjabloon:Taalaanduiding&action=edit" title="Sjabloon:Taalaanduiding">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:Taalaanduiding/styles.css" title="Sjabloon:Taalaanduiding/styles.css">Sjabloon:Taalaanduiding/styles.css</a> (<a href="/w/index.php?title=Sjabloon:Taalaanduiding/styles.css&action=edit" title="Sjabloon:Taalaanduiding/styles.css">bewerken</a>) </li><li><a href="/wiki/Sjabloon:Wikidata" title="Sjabloon:Wikidata">Sjabloon:Wikidata</a> (<a href="/w/index.php?title=Sjabloon:Wikidata&action=edit" title="Sjabloon:Wikidata">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Sjabloon:Wikidata_afbeelding" title="Sjabloon:Wikidata afbeelding">Sjabloon:Wikidata afbeelding</a> (<a href="/w/index.php?title=Sjabloon:Wikidata_afbeelding&action=edit" title="Sjabloon:Wikidata afbeelding">bekijk bron</a>) (semi-beveiligd)</li><li><a href="/wiki/Module:String" title="Module:String">Module:String</a> (<a href="/w/index.php?title=Module:String&action=edit" title="Module:String">bekijk bron</a>) (uitgebreid beveiligd)</li><li><a href="/wiki/Module:Wd" title="Module:Wd">Module:Wd</a> (<a href="/w/index.php?title=Module:Wd&action=edit" title="Module:Wd">bewerken</a>) </li><li><a href="/wiki/Module:Wd/i18n" title="Module:Wd/i18n">Module:Wd/i18n</a> (<a href="/w/index.php?title=Module:Wd/i18n&action=edit" title="Module:Wd/i18n">bewerken</a>) </li></ul></div><p id="mw-returnto">Terug naar <a href="/wiki/Haskell_(programmeertaal)" title="Haskell (programmeertaal)">Haskell (programmeertaal)</a>.</p> <!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Overgenomen van "<a dir="ltr" href="https://nl.wikipedia.org/wiki/Haskell_(programmeertaal)">https://nl.wikipedia.org/wiki/Haskell_(programmeertaal)</a>"</div></div> <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacybeleid</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia">Over Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:Algemeen_voorbehoud">Disclaimers</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Gedragscode</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Ontwikkelaars</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/nl.wikipedia.org">Statistieken</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookieverklaring</a></li> <li id="footer-places-mobileview"><a href="//nl.m.wikipedia.org/w/index.php?title=Haskell_(programmeertaal)&action=edit&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobiele weergave</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-5z8dw","wgBackendResponseTime":203,"wgPageParseReport":{"limitreport":{"cputime":"0.014","walltime":"0.019","ppvisitednodes":{"value":27,"limit":1000000},"postexpandincludesize":{"value":831,"limit":2097152},"templateargumentsize":{"value":0,"limit":2097152},"expansiondepth":{"value":2,"limit":100},"expensivefunctioncount":{"value":0,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":0,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 3.343 1 -total"," 96.05% 3.211 2 Sjabloon:Halfbr"]},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-5z8dw","timestamp":"20241125074300","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>