CINXE.COM
Haskell - Wikipedia
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-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-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available" lang="ja" dir="ltr"> <head> <meta charset="UTF-8"> <title>Haskell - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-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-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available";var cookie=document.cookie.match(/(?:^|; )jawikimwclientpreferences=([^;]+)/);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":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"ja", "wgMonthNames":["","1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"wgRequestId":"2587415b-8c92-4056-933a-5eda2639589b","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Haskell","wgTitle":"Haskell","wgCurRevisionId":103115824,"wgRevisionId":103115824,"wgArticleId":1141,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["出典を必要とする記述のある記事/2020年2月","すべてのスタブ記事","コンピュータ関連のスタブ項目","BNE識別子が指定されている記事","BNF識別子が指定されている記事","BNFdata識別子が指定されている記事","GND識別子が指定されている記事","J9U識別子が指定されている記事","LCCN識別子が指定されている記事","NKC識別子が指定されている記事","ISBNマジックリンクを使用しているページ", "プログラミング言語","関数型プログラミング言語","エポニム"],"wgPageViewLanguage":"ja","wgPageContentLanguage":"ja","wgPageContentModel":"wikitext","wgRelevantPageName":"Haskell","wgRelevantArticleId":1141,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":true,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"ja","pageLanguageDir":"ltr","pageVariantFallbacks":"ja"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":70000,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q34010","wgCheckUserClientHintsHeadersJsApi":[ "brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.gadget.PDFLinkIcon":"ready","ext.gadget.RedirectColor":"ready","ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.makeCollapsible.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","site","mediawiki.page.ready", "jquery.makeCollapsible","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.NormalizeCharWidth","ext.gadget.suppressEnterAtSummaryBox","ext.gadget.checkSignature","ext.gadget.charinsert","ext.gadget.WikiMiniAtlas","ext.gadget.switcher","ext.gadget.protectionIndicator","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.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession"];</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=ja&modules=ext.cite.styles%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=ja&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=ja&modules=ext.gadget.PDFLinkIcon%2CRedirectColor&only=styles&skin=vector-2022"> <link rel="stylesheet" href="/w/load.php?lang=ja&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.16"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="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="Haskell - 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="//ja.m.wikipedia.org/wiki/Haskell"> <link rel="alternate" type="application/x-wiki" title="編集" href="/w/index.php?title=Haskell&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 (ja)"> <link rel="EditURI" type="application/rsd+xml" href="//ja.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://ja.wikipedia.org/wiki/Haskell"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.ja"> <link rel="alternate" type="application/atom+xml" title="Wikipediaの Atom フィード" href="/w/index.php?title=%E7%89%B9%E5%88%A5:%E6%9C%80%E8%BF%91%E3%81%AE%E6%9B%B4%E6%96%B0&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <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 rootpage-Haskell skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">コンテンツにスキップ</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="サイト"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" title="メインメニュー" > <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="メインメニュー" > <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">メインメニュー</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">メインメニュー</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">サイドバーに移動</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">非表示</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> 案内 </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8" title="メインページに移動する [z]" accesskey="z"><span>メインページ</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%83%BB%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%AB" title="このプロジェクトについて、できること、情報を入手する場所"><span>コミュニティ・ポータル</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:%E6%9C%80%E8%BF%91%E3%81%AE%E5%87%BA%E6%9D%A5%E4%BA%8B" title="最近の出来事の背景を知る"><span>最近の出来事</span></a></li><li id="n-newpages" class="mw-list-item"><a href="/wiki/%E7%89%B9%E5%88%A5:%E6%96%B0%E3%81%97%E3%81%84%E3%83%9A%E3%83%BC%E3%82%B8" title="最近新規に作成されたページの一覧"><span>新しいページ</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/%E7%89%B9%E5%88%A5:%E6%9C%80%E8%BF%91%E3%81%AE%E6%9B%B4%E6%96%B0" title="このウィキにおける最近の更新の一覧 [r]" accesskey="r"><span>最近の更新</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/%E7%89%B9%E5%88%A5:%E3%81%8A%E3%81%BE%E3%81%8B%E3%81%9B%E8%A1%A8%E7%A4%BA" title="無作為に選択されたページを読み込む [x]" accesskey="x"><span>おまかせ表示</span></a></li><li id="n-sandbox" class="mw-list-item"><a href="/wiki/Wikipedia:%E3%82%B5%E3%83%B3%E3%83%89%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9" title="練習用のページ"><span>練習用ページ</span></a></li><li id="n-commonsupload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard?uselang=ja" title="画像やメディアファイルをウィキメディア・コモンズにアップロード"><span>アップロード (ウィキメディア・コモンズ)</span></a></li><li id="n-specialpages" class="mw-list-item"><a href="/wiki/%E7%89%B9%E5%88%A5:%E7%89%B9%E5%88%A5%E3%83%9A%E3%83%BC%E3%82%B8%E4%B8%80%E8%A6%A7"><span>特別ページ</span></a></li> </ul> </div> </div> <div id="p-help" class="vector-menu mw-portlet mw-portlet-help" > <div class="vector-menu-heading"> ヘルプ </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:%E7%9B%AE%E6%AC%A1" title="情報を得る場所"><span>ヘルプ</span></a></li><li id="n-villagepump" class="mw-list-item"><a href="/wiki/Wikipedia:%E4%BA%95%E6%88%B8%E7%AB%AF" title="プロジェクトについての意見交換"><span>井戸端</span></a></li><li id="n-notice" class="mw-list-item"><a href="/wiki/Wikipedia:%E3%81%8A%E7%9F%A5%E3%82%89%E3%81%9B" title="プロジェクトについてのお知らせ"><span>お知らせ</span></a></li><li id="n-bugreportspage" class="mw-list-item"><a href="/wiki/Wikipedia:%E3%83%90%E3%82%B0%E3%81%AE%E5%A0%B1%E5%91%8A" title="ウィキペディア・ソフトウェアのバグ報告"><span>バグの報告</span></a></li><li id="n-contact" class="mw-list-item"><a href="/wiki/Wikipedia:%E9%80%A3%E7%B5%A1%E5%85%88" title="ウィキペディアやウィキメディア財団に関する連絡先"><span>ウィキペディアに関するお問い合わせ</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8" 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-ja.svg" style="width: 7.5em; height: 1.25em;"> <img class="mw-logo-tagline" alt="" src="/static/images/mobile/copyright/wikipedia-tagline-ja.svg" width="100" height="14" style="width: 6.25em; height: 0.875em;"> </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/%E7%89%B9%E5%88%A5:%E6%A4%9C%E7%B4%A2" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Wikipedia内を検索 [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>検索</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="Wikipedia内を検索" aria-label="Wikipedia内を検索" autocapitalize="sentences" title="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="特別:検索"> </div> <button class="cdx-button cdx-search-input__end-button">検索</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="個人用ツール"> <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="表示"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="ページのフォントサイズ、幅、色の外観を変更する" > <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="表示" > <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">表示</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="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=ja.wikipedia.org&uselang=ja" class=""><span>寄付</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=%E7%89%B9%E5%88%A5:%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E4%BD%9C%E6%88%90&returnto=Haskell" title="アカウントを作成してログインすることをお勧めしますが、必須ではありません" class=""><span>アカウント作成</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=%E7%89%B9%E5%88%A5:%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3&returnto=Haskell" title="ログインすることを推奨します。ただし、必須ではありません。 [o]" accesskey="o" class=""><span>ログイン</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="その他の操作" > <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="個人用ツール" > <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">個人用ツール</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="利用者メニュー" > <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="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=ja.wikipedia.org&uselang=ja"><span>寄付</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=%E7%89%B9%E5%88%A5:%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E4%BD%9C%E6%88%90&returnto=Haskell" title="アカウントを作成してログインすることをお勧めしますが、必須ではありません"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>アカウント作成</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=%E7%89%B9%E5%88%A5:%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3&returnto=Haskell" title="ログインすることを推奨します。ただし、必須ではありません。 [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>ログイン</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"> ログアウトした編集者のページ <a href="/wiki/Wikipedia:%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A2%E3%81%B8%E3%82%88%E3%81%86%E3%81%93%E3%81%9D" aria-label="編集の詳細"><span>もっと詳しく</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/%E7%89%B9%E5%88%A5:%E8%87%AA%E5%88%86%E3%81%AE%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2" title="このIPアドレスからなされた編集の一覧 [y]" accesskey="y"><span>投稿記録</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/%E7%89%B9%E5%88%A5:%E3%83%88%E3%83%BC%E3%82%AF%E3%83%9A%E3%83%BC%E3%82%B8" title="このIPアドレスからなされた編集についての議論 [n]" accesskey="n"><span>トーク</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="サイト"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="目次" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">目次</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">サイドバーに移動</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">非表示</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">ページ先頭</div> </a> </li> <li id="toc-概要" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#概要"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>概要</span> </div> </a> <ul id="toc-概要-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-歴史" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#歴史"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>歴史</span> </div> </a> <button aria-controls="toc-歴史-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>歴史サブセクションを切り替えます</span> </button> <ul id="toc-歴史-sublist" class="vector-toc-list"> <li id="toc-Haskell_1.0" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Haskell_1.0"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span><span>Haskell</span> 1.0</span> </div> </a> <ul id="toc-Haskell_1.0-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Haskell_98" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Haskell_98"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.2</span> <span><span>Haskell</span> 98</span> </div> </a> <ul id="toc-Haskell_98-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Haskell′" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Haskell′"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3</span> <span><span>Haskell′</span></span> </div> </a> <ul id="toc-Haskell′-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Haskell_2010" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Haskell_2010"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4</span> <span><span>Haskell</span> 2010</span> </div> </a> <ul id="toc-Haskell_2010-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-主な構文" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#主な構文"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>主な構文</span> </div> </a> <button aria-controls="toc-主な構文-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>主な構文サブセクションを切り替えます</span> </button> <ul id="toc-主な構文-sublist" class="vector-toc-list"> <li id="toc-型" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#型"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>型</span> </div> </a> <ul id="toc-型-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-関数と演算子" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#関数と演算子"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>関数と演算子</span> </div> </a> <ul id="toc-関数と演算子-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-特徴的な機能" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#特徴的な機能"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>特徴的な機能</span> </div> </a> <button aria-controls="toc-特徴的な機能-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>特徴的な機能サブセクションを切り替えます</span> </button> <ul id="toc-特徴的な機能-sublist" class="vector-toc-list"> <li id="toc-遅延評価" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#遅延評価"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.1</span> <span>遅延評価</span> </div> </a> <ul id="toc-遅延評価-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-型推論" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#型推論"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.2</span> <span>型推論</span> </div> </a> <ul id="toc-型推論-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-代数的データ型" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#代数的データ型"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.3</span> <span>代数的データ型</span> </div> </a> <ul id="toc-代数的データ型-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-無名関数" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#無名関数"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.4</span> <span>無名関数</span> </div> </a> <ul id="toc-無名関数-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-関数のカリー化と部分適用" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#関数のカリー化と部分適用"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.5</span> <span>関数のカリー化と部分適用</span> </div> </a> <ul id="toc-関数のカリー化と部分適用-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-パターンマッチ" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#パターンマッチ"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.6</span> <span>パターンマッチ</span> </div> </a> <ul id="toc-パターンマッチ-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-リストとリスト内包表記" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#リストとリスト内包表記"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.7</span> <span>リストとリスト内包表記</span> </div> </a> <ul id="toc-リストとリスト内包表記-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-型クラスとインスタンス" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#型クラスとインスタンス"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.8</span> <span>型クラスとインスタンス</span> </div> </a> <ul id="toc-型クラスとインスタンス-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-入出力" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#入出力"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.9</span> <span>入出力</span> </div> </a> <ul id="toc-入出力-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-実例" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#実例"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>実例</span> </div> </a> <button aria-controls="toc-実例-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>実例サブセクションを切り替えます</span> </button> <ul id="toc-実例-sublist" class="vector-toc-list"> <li id="toc-より複合的な例" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#より複合的な例"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.1</span> <span>より複合的な例</span> </div> </a> <ul id="toc-より複合的な例-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-ライブラリ" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#ライブラリ"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>ライブラリ</span> </div> </a> <button aria-controls="toc-ライブラリ-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>ライブラリサブセクションを切り替えます</span> </button> <ul id="toc-ライブラリ-sublist" class="vector-toc-list"> <li id="toc-parsec" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#parsec"> <div class="vector-toc-text"> <span class="vector-toc-numb">6.1</span> <span>parsec</span> </div> </a> <ul id="toc-parsec-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Template_Haskell" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Template_Haskell"> <div class="vector-toc-text"> <span class="vector-toc-numb">6.2</span> <span><span>Template Haskell</span></span> </div> </a> <ul id="toc-Template_Haskell-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-QuickCheck" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#QuickCheck"> <div class="vector-toc-text"> <span class="vector-toc-numb">6.3</span> <span>QuickCheck</span> </div> </a> <ul id="toc-QuickCheck-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-lens" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#lens"> <div class="vector-toc-text"> <span class="vector-toc-numb">6.4</span> <span>lens</span> </div> </a> <ul id="toc-lens-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-批判" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#批判"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>批判</span> </div> </a> <ul id="toc-批判-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-実装" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#実装"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>実装</span> </div> </a> <ul id="toc-実装-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-代表的なアプリケーション" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#代表的なアプリケーション"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>代表的なアプリケーション</span> </div> </a> <ul id="toc-代表的なアプリケーション-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-脚注" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#脚注"> <div class="vector-toc-text"> <span class="vector-toc-numb">10</span> <span>脚注</span> </div> </a> <ul id="toc-脚注-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-参考文献" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#参考文献"> <div class="vector-toc-text"> <span class="vector-toc-numb">11</span> <span>参考文献</span> </div> </a> <ul id="toc-参考文献-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-学習用参考図書" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#学習用参考図書"> <div class="vector-toc-text"> <span class="vector-toc-numb">12</span> <span>学習用参考図書</span> </div> </a> <ul id="toc-学習用参考図書-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-関連項目" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#関連項目"> <div class="vector-toc-text"> <span class="vector-toc-numb">13</span> <span>関連項目</span> </div> </a> <ul id="toc-関連項目-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-外部リンク" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#外部リンク"> <div class="vector-toc-text"> <span class="vector-toc-numb">14</span> <span>外部リンク</span> </div> </a> <ul id="toc-外部リンク-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="目次" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" title="目次" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="目次の表示・非表示を切り替え" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-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-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">目次の表示・非表示を切り替え</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Haskell</span></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="特定の記事の別の言語版に移動します。 利用可能な言語54件" > <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-54" 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">54の言語版</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D9%87%D8%A7%D8%B3%D9%83%D9%84" title="アラビア語: هاسكل" lang="ar" hreflang="ar" data-title="هاسكل" data-language-autonym="العربية" data-language-local-name="アラビア語" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/Haskell_(proqramla%C5%9Fd%C4%B1rma_dili)" title="アゼルバイジャン語: Haskell (proqramlaşdırma dili)" lang="az" hreflang="az" data-title="Haskell (proqramlaşdırma dili)" data-language-autonym="Azərbaycanca" data-language-local-name="アゼルバイジャン語" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-be mw-list-item"><a href="https://be.wikipedia.org/wiki/Haskell" title="ベラルーシ語: Haskell" lang="be" hreflang="be" data-title="Haskell" data-language-autonym="Беларуская" data-language-local-name="ベラルーシ語" class="interlanguage-link-target"><span>Беларуская</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/Haskell" title="ブルガリア語: Haskell" lang="bg" hreflang="bg" data-title="Haskell" data-language-autonym="Български" data-language-local-name="ブルガリア語" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wikipedia.org/wiki/%E0%A6%B9%E0%A7%8D%E0%A6%AF%E0%A6%BE%E0%A6%B8%E0%A6%95%E0%A7%87%E0%A6%B2" title="ベンガル語: হ্যাসকেল" lang="bn" hreflang="bn" data-title="হ্যাসকেল" data-language-autonym="বাংলা" data-language-local-name="ベンガル語" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Haskell" title="カタロニア語: Haskell" lang="ca" hreflang="ca" data-title="Haskell" data-language-autonym="Català" data-language-local-name="カタロニア語" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/Haskell_(programovac%C3%AD_jazyk)" title="チェコ語: Haskell (programovací jazyk)" lang="cs" hreflang="cs" data-title="Haskell (programovací jazyk)" data-language-autonym="Čeština" data-language-local-name="チェコ語" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Haskell_(programmeringssprog)" title="デンマーク語: Haskell (programmeringssprog)" lang="da" hreflang="da" data-title="Haskell (programmeringssprog)" data-language-autonym="Dansk" data-language-local-name="デンマーク語" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Haskell_(Programmiersprache)" title="ドイツ語: Haskell (Programmiersprache)" lang="de" hreflang="de" data-title="Haskell (Programmiersprache)" data-language-autonym="Deutsch" data-language-local-name="ドイツ語" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wikipedia.org/wiki/Haskell" title="ギリシャ語: Haskell" lang="el" hreflang="el" data-title="Haskell" data-language-autonym="Ελληνικά" data-language-local-name="ギリシャ語" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/Haskell" title="英語: Haskell" lang="en" hreflang="en" data-title="Haskell" data-language-autonym="English" data-language-local-name="英語" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-eo mw-list-item"><a href="https://eo.wikipedia.org/wiki/Haskell_(komputillingvo)" title="エスペラント語: Haskell (komputillingvo)" lang="eo" hreflang="eo" data-title="Haskell (komputillingvo)" data-language-autonym="Esperanto" data-language-local-name="エスペラント語" class="interlanguage-link-target"><span>Esperanto</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Haskell" title="スペイン語: Haskell" lang="es" hreflang="es" data-title="Haskell" data-language-autonym="Español" data-language-local-name="スペイン語" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wikipedia.org/wiki/Haskell" title="エストニア語: Haskell" lang="et" hreflang="et" data-title="Haskell" data-language-autonym="Eesti" data-language-local-name="エストニア語" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-eu mw-list-item"><a href="https://eu.wikipedia.org/wiki/Haskell_(programazio_lengoaia)" title="バスク語: Haskell (programazio lengoaia)" lang="eu" hreflang="eu" data-title="Haskell (programazio lengoaia)" data-language-autonym="Euskara" data-language-local-name="バスク語" class="interlanguage-link-target"><span>Euskara</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D9%87%D8%B3%DA%A9%D9%84_(%D8%B2%D8%A8%D8%A7%D9%86_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C)" title="ペルシア語: هسکل (زبان برنامهنویسی)" lang="fa" hreflang="fa" data-title="هسکل (زبان برنامهنویسی)" data-language-autonym="فارسی" data-language-local-name="ペルシア語" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fi mw-list-item"><a href="https://fi.wikipedia.org/wiki/Haskell" title="フィンランド語: Haskell" lang="fi" hreflang="fi" data-title="Haskell" data-language-autonym="Suomi" data-language-local-name="フィンランド語" class="interlanguage-link-target"><span>Suomi</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Haskell" title="フランス語: Haskell" lang="fr" hreflang="fr" data-title="Haskell" data-language-autonym="Français" data-language-local-name="フランス語" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-gl mw-list-item"><a href="https://gl.wikipedia.org/wiki/Haskell" title="ガリシア語: Haskell" lang="gl" hreflang="gl" data-title="Haskell" data-language-autonym="Galego" data-language-local-name="ガリシア語" class="interlanguage-link-target"><span>Galego</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wikipedia.org/wiki/Haskell" title="ヘブライ語: Haskell" lang="he" hreflang="he" data-title="Haskell" data-language-autonym="עברית" data-language-local-name="ヘブライ語" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wikipedia.org/wiki/%E0%A4%B9%E0%A5%88%E0%A4%B8%E0%A5%8D%E0%A4%95%E0%A4%B2" title="ヒンディー語: हैस्कल" lang="hi" hreflang="hi" data-title="हैस्कल" data-language-autonym="हिन्दी" data-language-local-name="ヒンディー語" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-hr mw-list-item"><a href="https://hr.wikipedia.org/wiki/Haskell_(programski_jezik)" title="クロアチア語: Haskell (programski jezik)" lang="hr" hreflang="hr" data-title="Haskell (programski jezik)" data-language-autonym="Hrvatski" data-language-local-name="クロアチア語" class="interlanguage-link-target"><span>Hrvatski</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/Haskell_(programoz%C3%A1si_nyelv)" title="ハンガリー語: Haskell (programozási nyelv)" lang="hu" hreflang="hu" data-title="Haskell (programozási nyelv)" data-language-autonym="Magyar" data-language-local-name="ハンガリー語" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-hy mw-list-item"><a href="https://hy.wikipedia.org/wiki/Haskell" title="アルメニア語: Haskell" lang="hy" hreflang="hy" data-title="Haskell" data-language-autonym="Հայերեն" data-language-local-name="アルメニア語" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Haskell" title="インドネシア語: Haskell" lang="id" hreflang="id" data-title="Haskell" data-language-autonym="Bahasa Indonesia" data-language-local-name="インドネシア語" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-io mw-list-item"><a href="https://io.wikipedia.org/wiki/Haskell_(programifo-linguo)" title="イド語: Haskell (programifo-linguo)" lang="io" hreflang="io" data-title="Haskell (programifo-linguo)" data-language-autonym="Ido" data-language-local-name="イド語" class="interlanguage-link-target"><span>Ido</span></a></li><li class="interlanguage-link interwiki-is mw-list-item"><a href="https://is.wikipedia.org/wiki/Haskell_(forritunarm%C3%A1l)" title="アイスランド語: Haskell (forritunarmál)" lang="is" hreflang="is" data-title="Haskell (forritunarmál)" data-language-autonym="Íslenska" data-language-local-name="アイスランド語" class="interlanguage-link-target"><span>Íslenska</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Haskell_(linguaggio_di_programmazione)" title="イタリア語: Haskell (linguaggio di programmazione)" lang="it" hreflang="it" data-title="Haskell (linguaggio di programmazione)" data-language-autonym="Italiano" data-language-local-name="イタリア語" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-kk mw-list-item"><a href="https://kk.wikipedia.org/wiki/%D0%9C%D3%99%D1%82%D1%96%D0%BD%D0%B4%D1%96_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D1%82%D1%8B_%D3%A9%D2%A3%D0%B4%D0%B5%D1%83" title="カザフ語: Мәтінді автоматты өңдеу" lang="kk" hreflang="kk" data-title="Мәтінді автоматты өңдеу" data-language-autonym="Қазақша" data-language-local-name="カザフ語" class="interlanguage-link-target"><span>Қазақша</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%ED%95%98%EC%8A%A4%EC%BC%88" title="韓国語: 하스켈" lang="ko" hreflang="ko" data-title="하스켈" data-language-autonym="한국어" data-language-local-name="韓国語" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-la mw-list-item"><a href="https://la.wikipedia.org/wiki/Haskell" title="ラテン語: Haskell" lang="la" hreflang="la" data-title="Haskell" data-language-autonym="Latina" data-language-local-name="ラテン語" class="interlanguage-link-target"><span>Latina</span></a></li><li class="interlanguage-link interwiki-lb mw-list-item"><a href="https://lb.wikipedia.org/wiki/Haskell_(Programm%C3%A9iersprooch)" title="ルクセンブルク語: Haskell (Programméiersprooch)" lang="lb" hreflang="lb" data-title="Haskell (Programméiersprooch)" data-language-autonym="Lëtzebuergesch" data-language-local-name="ルクセンブルク語" class="interlanguage-link-target"><span>Lëtzebuergesch</span></a></li><li class="interlanguage-link interwiki-lv mw-list-item"><a href="https://lv.wikipedia.org/wiki/Haskell" title="ラトビア語: Haskell" lang="lv" hreflang="lv" data-title="Haskell" data-language-autonym="Latviešu" data-language-local-name="ラトビア語" class="interlanguage-link-target"><span>Latviešu</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wikipedia.org/wiki/%E0%B4%B9%E0%B4%BE%E0%B4%B8%E0%B5%8D%E0%B4%95%E0%B5%BD_(%E0%B4%AA%E0%B5%8D%E0%B4%B0%E0%B5%8B%E0%B4%97%E0%B5%8D%E0%B4%B0%E0%B4%BE%E0%B4%AE%E0%B4%BF%E0%B4%99%E0%B5%8D_%E0%B4%AD%E0%B4%BE%E0%B4%B7)" title="マラヤーラム語: ഹാസ്കൽ (പ്രോഗ്രാമിങ് ഭാഷ)" lang="ml" hreflang="ml" data-title="ഹാസ്കൽ (പ്രോഗ്രാമിങ് ഭാഷ)" data-language-autonym="മലയാളം" data-language-local-name="マラヤーラム語" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-mr mw-list-item"><a href="https://mr.wikipedia.org/wiki/%E0%A4%B9%E0%A5%85%E0%A4%B8%E0%A5%8D%E0%A4%95%E0%A5%87%E0%A4%B2_(%E0%A4%AA%E0%A5%8D%E0%A4%B0%E0%A5%8B%E0%A4%97%E0%A5%8D%E0%A4%B0%E0%A5%85%E0%A4%AE%E0%A4%BF%E0%A4%82%E0%A4%97_%E0%A4%AD%E0%A4%BE%E0%A4%B7%E0%A4%BE)" title="マラーティー語: हॅस्केल (प्रोग्रॅमिंग भाषा)" lang="mr" hreflang="mr" data-title="हॅस्केल (प्रोग्रॅमिंग भाषा)" data-language-autonym="मराठी" data-language-local-name="マラーティー語" class="interlanguage-link-target"><span>मराठी</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wikipedia.org/wiki/Haskell" title="マレー語: Haskell" lang="ms" hreflang="ms" data-title="Haskell" data-language-autonym="Bahasa Melayu" data-language-local-name="マレー語" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikipedia.org/wiki/Haskell_(programmeertaal)" title="オランダ語: Haskell (programmeertaal)" lang="nl" hreflang="nl" data-title="Haskell (programmeertaal)" data-language-autonym="Nederlands" data-language-local-name="オランダ語" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/Haskell" title="ノルウェー語(ブークモール): Haskell" lang="nb" hreflang="nb" data-title="Haskell" data-language-autonym="Norsk bokmål" data-language-local-name="ノルウェー語(ブークモール)" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-pa mw-list-item"><a href="https://pa.wikipedia.org/wiki/%E0%A8%B9%E0%A9%88%E0%A8%B8%E0%A8%95%E0%A8%B2_(%E0%A8%AA%E0%A9%8D%E0%A8%B0%E0%A9%8B%E0%A8%97%E0%A8%B0%E0%A8%BE%E0%A8%AE%E0%A8%BF%E0%A9%B0%E0%A8%97_%E0%A8%AD%E0%A8%BE%E0%A8%B8%E0%A8%BC%E0%A8%BE)" title="パンジャブ語: ਹੈਸਕਲ (ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾ)" lang="pa" hreflang="pa" data-title="ਹੈਸਕਲ (ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾ)" data-language-autonym="ਪੰਜਾਬੀ" data-language-local-name="パンジャブ語" class="interlanguage-link-target"><span>ਪੰਜਾਬੀ</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Haskell" title="ポーランド語: Haskell" lang="pl" hreflang="pl" data-title="Haskell" data-language-autonym="Polski" data-language-local-name="ポーランド語" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Haskell_(linguagem_de_programa%C3%A7%C3%A3o)" title="ポルトガル語: Haskell (linguagem de programação)" lang="pt" hreflang="pt" data-title="Haskell (linguagem de programação)" data-language-autonym="Português" data-language-local-name="ポルトガル語" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ro mw-list-item"><a href="https://ro.wikipedia.org/wiki/Haskell" title="ルーマニア語: Haskell" lang="ro" hreflang="ro" data-title="Haskell" data-language-autonym="Română" data-language-local-name="ルーマニア語" class="interlanguage-link-target"><span>Română</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/Haskell" title="ロシア語: Haskell" lang="ru" hreflang="ru" data-title="Haskell" data-language-autonym="Русский" data-language-local-name="ロシア語" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wikipedia.org/wiki/Haskell" title="シンプル英語: Haskell" lang="en-simple" hreflang="en-simple" data-title="Haskell" data-language-autonym="Simple English" data-language-local-name="シンプル英語" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sk mw-list-item"><a href="https://sk.wikipedia.org/wiki/Haskell_(programovac%C3%AD_jazyk)" title="スロバキア語: Haskell (programovací jazyk)" lang="sk" hreflang="sk" data-title="Haskell (programovací jazyk)" data-language-autonym="Slovenčina" data-language-local-name="スロバキア語" class="interlanguage-link-target"><span>Slovenčina</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wikipedia.org/wiki/Haskell" title="スロベニア語: Haskell" lang="sl" hreflang="sl" data-title="Haskell" data-language-autonym="Slovenščina" data-language-local-name="スロベニア語" class="interlanguage-link-target"><span>Slovenščina</span></a></li><li class="interlanguage-link interwiki-sq mw-list-item"><a href="https://sq.wikipedia.org/wiki/Haskell" title="アルバニア語: Haskell" lang="sq" hreflang="sq" data-title="Haskell" data-language-autonym="Shqip" data-language-local-name="アルバニア語" class="interlanguage-link-target"><span>Shqip</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/Haskel_(programski_jezik)" title="セルビア語: Haskel (programski jezik)" lang="sr" hreflang="sr" data-title="Haskel (programski jezik)" data-language-autonym="Српски / srpski" data-language-local-name="セルビア語" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikipedia.org/wiki/Haskell_(programspr%C3%A5k)" title="スウェーデン語: Haskell (programspråk)" lang="sv" hreflang="sv" data-title="Haskell (programspråk)" data-language-autonym="Svenska" data-language-local-name="スウェーデン語" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B9%81%E0%B8%AE%E0%B8%AA%E0%B9%80%E0%B8%84%E0%B8%B4%E0%B8%A5" title="タイ語: ภาษาแฮสเคิล" lang="th" hreflang="th" data-title="ภาษาแฮสเคิล" data-language-autonym="ไทย" data-language-local-name="タイ語" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Haskell" title="トルコ語: Haskell" lang="tr" hreflang="tr" data-title="Haskell" data-language-autonym="Türkçe" data-language-local-name="トルコ語" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/Haskell" title="ウクライナ語: Haskell" lang="uk" hreflang="uk" data-title="Haskell" data-language-autonym="Українська" data-language-local-name="ウクライナ語" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/Haskell_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)" title="ベトナム語: Haskell (ngôn ngữ lập trình)" lang="vi" hreflang="vi" data-title="Haskell (ngôn ngữ lập trình)" data-language-autonym="Tiếng Việt" data-language-local-name="ベトナム語" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Haskell" title="中国語: Haskell" lang="zh" hreflang="zh" data-title="Haskell" data-language-autonym="中文" data-language-local-name="中国語" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q34010#sitelinks-wikipedia" title="言語間リンクを編集" class="wbc-editpage">リンクを編集</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="名前空間"> <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" title="本文を閲覧 [c]" accesskey="c"><span>ページ</span></a></li><li id="ca-talk" class="new vector-tab-noicon mw-list-item"><a href="/w/index.php?title=%E3%83%8E%E3%83%BC%E3%83%88:Haskell&action=edit&redlink=1" rel="discussion" class="new" title="本文ページについての議論 (存在しないページ) [t]" accesskey="t"><span>ノート</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="別の言語に切り替える" > <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">日本語</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="表示"> <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="selected vector-tab-noicon mw-list-item"><a href="/wiki/Haskell"><span>閲覧</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Haskell&action=edit" title="このページのソースコードを編集する [e]" accesskey="e"><span>編集</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Haskell&action=history" title="このページの過去の版 [h]" accesskey="h"><span>履歴を表示</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="ページツール"> <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="ツール" > <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">ツール</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">ツール</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">サイドバーに移動</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">非表示</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="その他の操作" > <div class="vector-menu-heading"> 操作 </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Haskell"><span>閲覧</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Haskell&action=edit" title="このページのソースコードを編集する [e]" accesskey="e"><span>編集</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Haskell&action=history"><span>履歴を表示</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> 全般 </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/%E7%89%B9%E5%88%A5:%E3%83%AA%E3%83%B3%E3%82%AF%E5%85%83/Haskell" title="ここにリンクしている全ウィキページの一覧 [j]" accesskey="j"><span>リンク元</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/%E7%89%B9%E5%88%A5:%E9%96%A2%E9%80%A3%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E6%9B%B4%E6%96%B0%E7%8A%B6%E6%B3%81/Haskell" rel="nofollow" title="このページからリンクしているページの最近の更新 [k]" accesskey="k"><span>関連ページの更新状況</span></a></li><li id="t-upload" class="mw-list-item"><a href="//ja.wikipedia.org/wiki/Wikipedia:ファイルのアップロード" title="ファイルをアップロードする [u]" accesskey="u"><span>ファイルをアップロード</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Haskell&oldid=103115824" title="このページのこの版への固定リンク"><span>この版への固定リンク</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Haskell&action=info" title="このページについての詳細情報"><span>ページ情報</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=%E7%89%B9%E5%88%A5:%E3%81%93%E3%81%AE%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E5%BC%95%E7%94%A8&page=Haskell&id=103115824&wpFormIdentifier=titleform" title="このページの引用方法"><span>このページを引用</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=%E7%89%B9%E5%88%A5:UrlShortener&url=https%3A%2F%2Fja.wikipedia.org%2Fwiki%2FHaskell"><span>短縮URLを取得する</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=%E7%89%B9%E5%88%A5:QrCode&url=https%3A%2F%2Fja.wikipedia.org%2Fwiki%2FHaskell"><span>QRコードをダウンロード</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> 印刷/書き出し </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-create_a_book" class="mw-list-item"><a href="/w/index.php?title=%E7%89%B9%E5%88%A5:%E3%83%96%E3%83%83%E3%82%AF&bookcmd=book_creator&referer=Haskell"><span>ブックの新規作成</span></a></li><li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=%E7%89%B9%E5%88%A5:DownloadAsPdf&page=Haskell&action=show-download-screen"><span>PDF 形式でダウンロード</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Haskell&printable=yes" title="このページの印刷用ページ [p]" accesskey="p"><span>印刷用バージョン</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"> 他のプロジェクト </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:Haskell" hreflang="en"><span>コモンズ</span></a></li><li class="wb-otherproject-link wb-otherproject-wikibooks mw-list-item"><a href="https://ja.wikibooks.org/wiki/Haskell" hreflang="ja"><span>ウィキブックス</span></a></li><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="関連付けられたデータリポジトリ項目へのリンク [g]" accesskey="g"><span>ウィキデータ項目</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="ページツール"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="表示"> <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">表示</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">サイドバーに移動</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">非表示</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 id="siteSub" class="noprint">出典: フリー百科事典『ウィキペディア(Wikipedia)』</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="ja" dir="ltr"><table class="infobox vevent" style="width:22em;"><caption itemprop="name" class="summary" style="">Haskell</caption><tbody><tr class="" style="" itemprop=""><td colspan="2" class="" style="text-align:center;" itemprop=""> <span typeof="mw:File"><a href="/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Haskell-Logo.svg" class="mw-file-description" title="Haskell"><img alt="Haskell" src="//upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Haskell-Logo.svg/144px-Haskell-Logo.svg.png" decoding="async" width="144" height="102" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Haskell-Logo.svg/216px-Haskell-Logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Haskell-Logo.svg/288px-Haskell-Logo.svg.png 2x" data-file-width="512" data-file-height="361" /></a></span><div style="">Haskellのロゴ</div></td></tr><tr class="" style="" itemprop=""><th scope="row" style="text-align:left; white-space:nowrap;"><a href="/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%91%E3%83%A9%E3%83%80%E3%82%A4%E3%83%A0" title="プログラミングパラダイム">パラダイム</a></th><td class="" style="" itemprop=""> <a href="/wiki/%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" title="関数型プログラミング">関数型プログラミング</a>、純粋関数型言語、非正格プログラミング言語 <span class="penicon autoconfirmed-show"><span class="mw-valign-text-top" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q34010?uselang=ja#P3966" title="ウィキデータを編集"><img alt="ウィキデータを編集" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></span></td></tr><tr class="" style="" itemprop=""><th scope="row" style="text-align:left; white-space:nowrap;">登場時期</th><td class="" style="" itemprop=""> <style data-mw-deduplicate="TemplateStyles:r101550662">.mw-parser-output .plainlist--only-child>ol,.mw-parser-output .plainlist--only-child>ul{line-height:inherit;list-style:none none;margin:0;padding-left:0}.mw-parser-output .plainlist--only-child>ol li,.mw-parser-output .plainlist--only-child>ul li{margin-bottom:0}</style><div class="plainlist"><ul><li>1990年 <span class="penicon autoconfirmed-show"><span class="mw-valign-text-top" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q34010?uselang=ja#P571" title="ウィキデータを編集"><img alt="ウィキデータを編集" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></span></li></ul></div></td></tr><tr class="" style="" itemprop=""><th scope="row" style="text-align:left; white-space:nowrap;">開発者</th><td class="" style="" itemprop=""> ポール・ヒューダック、レナート・オーガストソン、John Hughes、<a href="/wiki/%E3%82%B5%E3%82%A4%E3%83%A2%E3%83%B3%E3%83%BB%E3%83%9A%E3%82%A4%E3%83%88%E3%83%B3%E3%83%BB%E3%82%B8%E3%83%A7%E3%83%BC%E3%83%B3%E3%82%BA" title="サイモン・ペイトン・ジョーンズ">サイモン・ペイトン・ジョーンズ</a>、エリック・マイヤー、Philip Wadler <span class="penicon autoconfirmed-show"><span class="mw-valign-text-top" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q34010?uselang=ja#P178" title="ウィキデータを編集"><img alt="ウィキデータを編集" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></span></td></tr><tr class="" style="" itemprop=""><th scope="row" style="text-align:left; white-space:nowrap;">最新リリース</th><td class="" style="" itemprop=""> Haskell 2010 / 2010年6月<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></td></tr><tr class="" style="" itemprop=""><th scope="row" style="text-align:left; white-space:nowrap;"><a href="/wiki/%E5%9E%8B%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0" title="型システム">型付け</a></th><td class="" style="" itemprop=""> 強い<a href="/wiki/%E9%9D%99%E7%9A%84%E5%9E%8B%E4%BB%98%E3%81%91" title="静的型付け">静的型付け</a></td></tr><tr class="" style="" itemprop=""><th scope="row" style="text-align:left; white-space:nowrap;">主な処理系</th><td class="" style="" itemprop=""> <a href="/wiki/Glasgow_Haskell_Compiler" title="Glasgow Haskell Compiler">GHC</a>、<a href="/w/index.php?title=Hugs&action=edit&redlink=1" class="new" title="Hugs (存在しないページ)">Hugs</a>、<a rel="nofollow" class="external text" href="http://www.cs.york.ac.uk/fp/nhc98/">NHC</a>、<a rel="nofollow" class="external text" href="http://repetae.net/john/computer/jhc/">JHC</a>、<a href="/w/index.php?title=Yhc&action=edit&redlink=1" class="new" title="Yhc (存在しないページ)">Yhc</a></td></tr><tr class="" style="" itemprop=""><th scope="row" style="text-align:left; white-space:nowrap;">影響を受けた言語</th><td class="" style="" itemprop=""> <a href="/wiki/LISP" title="LISP">LISP</a>、<a href="/wiki/ML_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="ML (プログラミング言語)">ML</a>、<a href="/wiki/Miranda" title="Miranda">Miranda</a>、Orwell、Lazy ML、<a href="/wiki/Clean" title="Clean">Clean</a> <span class="penicon autoconfirmed-show"><span class="mw-valign-text-top" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q34010?uselang=ja#P737" title="ウィキデータを編集"><img alt="ウィキデータを編集" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></span></td></tr><tr class="" style="" itemprop=""><th scope="row" style="text-align:left; white-space:nowrap;">影響を与えた言語</th><td class="" style="" itemprop=""> <a href="/wiki/Factor" title="Factor">Factor</a></td></tr><tr class="" style="" itemprop=""><th scope="row" style="text-align:left; white-space:nowrap;"><a href="/wiki/%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0)" title="プラットフォーム (コンピューティング)">プラットフォーム</a></th><td class="" style="" itemprop=""> <a href="/wiki/Microsoft_Windows" title="Microsoft Windows">Microsoft Windows</a>、<a href="/wiki/Unix%E7%B3%BB" title="Unix系">Unix系</a> <span class="penicon autoconfirmed-show"><span class="mw-valign-text-top" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q34010?uselang=ja#P306" title="ウィキデータを編集"><img alt="ウィキデータを編集" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></span></td></tr><tr class="" style="" itemprop=""><th scope="row" style="text-align:left; white-space:nowrap;"><a href="/wiki/%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B5%E3%82%A4%E3%83%88" title="ウェブサイト">ウェブサイト</a></th><td class="" style="" itemprop=""> <span class="url"><a rel="nofollow" class="external text" href="https://www.haskell.org">www<wbr />.haskell<wbr />.org</a></span> <span class="mw-valign-text-top noprint" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q34010#P856" title="ウィキデータを編集"><img alt="ウィキデータを編集" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></td></tr><tr class="" style="" itemprop=""><th scope="row" style="text-align:left; white-space:nowrap;">拡張子</th><td class="" style="" itemprop=""> hs、lhs <span class="penicon autoconfirmed-show"><span class="mw-valign-text-top" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q34010?uselang=ja#P1195" title="ウィキデータを編集"><img alt="ウィキデータを編集" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></span></td></tr><tr class="noprint"><td colspan="2" style="text-align:right; font-size:85%;"><a href="/wiki/Template:Infobox_%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E" title="Template:Infobox プログラミング言語">テンプレートを表示</a></td></tr></tbody></table> <div style="clear:right; float:right; position:relative;" class="noprint"> <div class="navbox" style="background:#f0fff0; border:1px solid #4682b4; padding: 4px; font-size: 12px; line-height: 14px; width: 280px; height: 52px"> <div style="float:left; margin: 0px; margin-right:8px; border:1px solid #4682b4;"><span typeof="mw:File"><a href="/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Computer_n_screen.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/7/77/Computer_n_screen.svg/47px-Computer_n_screen.svg.png" decoding="async" width="47" height="49" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/7/77/Computer_n_screen.svg/71px-Computer_n_screen.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/77/Computer_n_screen.svg/94px-Computer_n_screen.svg.png 2x" data-file-width="119" data-file-height="123" /></a></span></div><br /><big style="font-size: 18px; line-height: 20px;"><b><a href="/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E" title="プログラミング言語">プログラミング言語</a></b></big><div style="text-align: right; font-size: 12px; line-height: 14px; margin:0; padding:0;">>><a href="/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E4%B8%80%E8%A6%A7" title="プログラミング言語一覧">他のプログラミング言語</a></div></div> <p style="text-align:right; font-size:xx-small; margin:0; bottom-margin: 4px;"><a href="/wiki/Category:%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E" title="Category:プログラミング言語">■</a>カテゴリ / <a href="/wiki/Template:%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E" title="Template:プログラミング言語">■</a>テンプレート</p></div> <p><span lang="en"><b>Haskell</b></span>(ハスケル)は<a href="/wiki/%E8%A9%95%E4%BE%A1%E6%88%A6%E7%95%A5#正格でない評価" title="評価戦略">非正格</a>な評価を特徴とする<a href="/wiki/%E9%96%A2%E6%95%B0%E5%9E%8B%E8%A8%80%E8%AA%9E" class="mw-redirect" title="関数型言語">純粋関数型プログラミング言語</a>である。名称は<a href="/wiki/%E6%95%B0%E5%AD%A6%E8%80%85" title="数学者">数学者</a>であり<a href="/wiki/%E8%AB%96%E7%90%86%E5%AD%A6%E8%80%85" title="論理学者">論理学者</a>である<a href="/wiki/%E3%83%8F%E3%82%B9%E3%82%B1%E3%83%AB%E3%83%BB%E3%82%AB%E3%83%AA%E3%83%BC" title="ハスケル・カリー">ハスケル・カリー</a>に由来する。 </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="概要"><span id=".E6.A6.82.E8.A6.81"></span>概要</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=1" title="節を編集: 概要"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><span lang="en">Haskell</span> は<a href="/wiki/%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0" title="高階関数">高階関数</a>や<a href="/wiki/%E9%9D%99%E7%9A%84%E5%9E%8B%E4%BB%98%E3%81%91" title="静的型付け">静的</a><a href="/wiki/%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%95%E3%82%A3%E3%82%BA%E3%83%A0" title="ポリモーフィズム">多相型付け</a>、<a href="/wiki/%E5%AE%9A%E7%BE%A9" title="定義">定義</a>可能な<a href="/wiki/%E6%BC%94%E7%AE%97%E5%AD%90_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E8%A8%80%E8%AA%9E)" title="演算子 (コンピュータ言語)">演算子</a>、例外処理といった多くの言語で採用されている現代的な機能に加え、<a href="/wiki/%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%83%9E%E3%83%83%E3%83%81%E3%83%B3%E3%82%B0" title="パターンマッチング">パターンマッチング</a>や<a href="/wiki/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96" title="カリー化">カリー化</a>、リスト内包表記、<a href="/wiki/%E3%82%AC%E3%83%BC%E3%83%89_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)" title="ガード (プログラミング)">ガード</a>といった多くの特徴的な機能を持っている。また、<a href="/wiki/%E9%81%85%E5%BB%B6%E8%A9%95%E4%BE%A1" title="遅延評価">遅延評価</a>や<a href="/wiki/%E5%86%8D%E5%B8%B0" title="再帰">再帰</a>的な<a href="/wiki/%E3%82%B5%E3%83%96%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3#関数" title="サブルーチン">関数</a>や<a href="/wiki/%E4%BB%A3%E6%95%B0%E7%9A%84%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B" title="代数的データ型">代数的データ型</a>もサポートしているほか、独自の概念として<a href="/wiki/%E5%9C%8F%E8%AB%96" title="圏論">圏論</a>のアイデアを利用し<a href="/wiki/%E5%8F%82%E7%85%A7%E9%80%8F%E9%81%8E%E6%80%A7" title="参照透過性">参照透過性</a>を壊すことなく副作用のある操作(例えば <a href="/wiki/%E5%A4%89%E6%95%B0_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)#代入" title="変数 (プログラミング)">代入</a>、<a href="/wiki/%E5%85%A5%E5%87%BA%E5%8A%9B#コンピュータ処理における入出力" title="入出力">入出力</a>、<a href="/wiki/%E9%85%8D%E5%88%97" title="配列">配列</a>など)を実現する<a href="/wiki/%E3%83%A2%E3%83%8A%E3%83%89_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)" title="モナド (プログラミング)">モナド</a>を含む。このような機能の組み合わせにより、<a href="/wiki/%E6%89%8B%E7%B6%9A%E3%81%8D%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E" class="mw-redirect" title="手続き型プログラミング言語">手続き型プログラミング言語</a>では記述が複雑になるような処理がしばしば簡潔になるばかりではなく、必要に応じて手続き型プログラミングを利用できる。 </p><p><span lang="en">Haskell</span> は関数型プログラミングの研究対象として人気が高い。あわせて <span lang="en">Parallel Haskell</span> と呼ばれる<a href="/wiki/%E3%83%9E%E3%82%B5%E3%83%81%E3%83%A5%E3%83%BC%E3%82%BB%E3%83%83%E3%83%84%E5%B7%A5%E7%A7%91%E5%A4%A7%E5%AD%A6" title="マサチューセッツ工科大学">マサチューセッツ工科大学</a>や<a href="/wiki/%E3%82%B0%E3%83%A9%E3%82%B9%E3%82%B4%E3%83%BC%E5%A4%A7%E5%AD%A6" title="グラスゴー大学">グラスゴー大学</a>によるものをはじめ、他にも <span lang="en">Distributed Haskell</span><sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> や <span lang="en">Eden</span> といった分散バージョン、<span lang="en">Eager Haskell</span> と呼ばれる<a href="/wiki/%E6%8A%95%E6%A9%9F%E7%9A%84%E5%AE%9F%E8%A1%8C" title="投機的実行">投機的実行</a>バージョン、<span lang="en">Haskell++</span> や <span lang="en">O'Haskell</span>、<span lang="en">Mondrian</span> といった<a href="/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91" title="オブジェクト指向">オブジェクト指向</a>バージョンも複数存在しているなど、いくつもの派生形が開発されてきている。 </p><p><a href="/wiki/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%82%AB%E3%83%AB%E3%83%A6%E3%83%BC%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9" class="mw-redirect" title="グラフィカルユーザインターフェース">GUI</a>開発向けサポートの新しい方法を提供する、<span lang="en"><a href="/wiki/Clean" title="Clean">Concurrent Clean</a></span> と呼ばれる <span lang="en">Haskell</span> に似た言語もある。<span lang="en">Haskell</span> と <span lang="en">Concurrent Clean</span> の最大の違いは、<a href="/wiki/%E3%83%A2%E3%83%8A%E3%83%89_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)" title="モナド (プログラミング)">モナド</a>を代用する一意型の採用である。 </p><p><span lang="en">Haskell</span> は比較的小規模なユーザコミュニティを持つが、その力はいくつかのプロジェクトで十分に生かされてきた。<a href="/wiki/%E3%82%AA%E3%83%BC%E3%83%89%E3%83%AA%E3%83%BC%E3%83%BB%E3%82%BF%E3%83%B3" class="mw-redirect" title="オードリー・タン">オードリー・タン</a>による <span lang="en">Pugs</span> は <a href="/wiki/Raku" title="Raku">Perl6</a> の<a href="/wiki/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%97%E3%83%AA%E3%82%BF" title="インタプリタ">インタプリタ</a>と<a href="/wiki/%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9" title="コンパイラ">コンパイラ</a>の実装で、書くのにたったの数ヶ月しかかからなかったなど <span lang="en">Haskell</span> の有用性を証明するものである(現在は開発停止)。Darcs はさまざまな革新的な機能を含むリビジョンコントロールシステムである。<span lang="en"><a href="/wiki/Linspire" title="Linspire">Linspire</a> Linux</span> は <span lang="en">Haskell</span> をシステムツール開発に選択した。 </p><p><span lang="en">Haskell</span> の急速な進化は今も継続しており、<a href="/wiki/Glasgow_Haskell_Compiler" title="Glasgow Haskell Compiler">Glasgow Haskell Compiler</a>(GHC)は現在の<a href="/wiki/%E3%83%87%E3%83%95%E3%82%A1%E3%82%AF%E3%83%88%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%80%E3%83%BC%E3%83%89" title="デファクトスタンダード">事実上の標準</a>の処理系であるといえる。 </p><p><span lang="en"><a href="https://en.wikipedia.org/wiki/ICFP_Programming_Contest" class="extiw" title="en:ICFP Programming Contest">ICFP Programming Contest</a></span>では2001、2004、2005、2010、2013、2014、2015、2016年に最優秀賞に選ばれている。 </p><p><span title="リンク先の項目はまだありません。新規の執筆や他言語版からの翻訳が望まれます。"><a href="/w/index.php?title=Cabal_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)&action=edit&redlink=1" class="new" title="Cabal (ソフトウェア) (存在しないページ)">Cabal</a><span style="font-size: 0.77em; font-weight: normal;" class="noprint">(<a href="https://en.wikipedia.org/wiki/Cabal_(software)" class="extiw" title="en:Cabal (software)">英語版</a>)</span></span> は <span lang="en">Haskell</span> 用のビルドおよびパッケージングシステムである。<span lang="en">Cabal</span> を利用して <span lang="en">Haskell</span> ライブラリのアーカイブである <span lang="en">Hackage</span> を参照して、新たなパッケージを簡単にインストールすることもできる。しばしばパッケージの<span title="リンク先の項目はまだありません。新規の執筆や他言語版からの翻訳が望まれます。"><a href="/w/index.php?title=%E4%BE%9D%E5%AD%98%E5%9C%B0%E7%8D%84&action=edit&redlink=1" class="new" title="依存地獄 (存在しないページ)">依存地獄</a><span style="font-size: 0.77em; font-weight: normal;" class="noprint">(<a href="https://en.wikipedia.org/wiki/Dependency_hell" class="extiw" title="en:Dependency hell">英語版</a>)</span></span>が発生しがちだが、それらを解決するため、<span title="リンク先の項目はまだありません。新規の執筆や他言語版からの翻訳が望まれます。"><a href="/w/index.php?title=Stack_(Haskell)&action=edit&redlink=1" class="new" title="Stack (Haskell) (存在しないページ)">Stack</a><span style="font-size: 0.77em; font-weight: normal;" class="noprint">(<a href="https://en.wikipedia.org/wiki/Stack_(Haskell)" class="extiw" title="en:Stack (Haskell)">英語版</a>)</span></span>という環境も有志によって提供されている。 </p> <div class="mw-heading mw-heading2"><h2 id="歴史"><span id=".E6.AD.B4.E5.8F.B2"></span>歴史</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=2" title="節を編集: 歴史"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/1985%E5%B9%B4" title="1985年">1985年</a>、遅延関数言語である <span lang="en">Miranda</span> がリサーチ・ソフトウェア社によって発表された。<a href="/wiki/1987%E5%B9%B4" title="1987年">1987年</a>にはこのような非正格な純粋関数型プログラミング言語が十二以上存在していたが、そのうち最も広く使われていた <span lang="en">Miranda</span> は<a href="/wiki/%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3" title="パブリックドメイン">パブリックドメイン</a>ではなかった。<a href="/wiki/%E3%83%9D%E3%83%BC%E3%83%88%E3%83%A9%E3%83%B3%E3%83%89_(%E3%82%AA%E3%83%AC%E3%82%B4%E3%83%B3%E5%B7%9E)" title="ポートランド (オレゴン州)">オレゴン州ポートランド</a>で開催された <span lang="en">Functional Programming Languages and Computer Architecture</span> (<span lang="en">FPCA '87</span>) において開かれた会議中に、遅延関数型言語のオープンな標準を作成するための委員会が発足されるべき、という強い合意が参加者のあいだで形成された。委員会の目的は、関数型言語のデザインにおける将来の研究のための基礎として役立つ共通のものへと、既存の関数型言語を統合することであった<sup id="cite_ref-Pref_98_3-0" class="reference"><a href="#cite_note-Pref_98-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>。 </p> <div class="mw-heading mw-heading3"><h3 id="Haskell_1.0"><span lang="en">Haskell</span> 1.0</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=3" title="節を編集: Haskell 1.0"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>最初の版の <span lang="en">Haskell</span>(<span lang="en">Haskell</span> 1.0)は<a href="/wiki/1990%E5%B9%B4" title="1990年">1990年</a>に作成された<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>。委員会の活動は一連の言語仕様を結果に残し、<a href="/wiki/1997%E5%B9%B4" title="1997年">1997年</a>後半にそのシリーズは、安定しており小さく可搬なバージョンの言語仕様と、学習用および将来の拡張の基礎としての基本ライブラリなどを定義した<span lang="en">Haskell</span> 98 に到達した。実験的な機能の付加や統合を通じて <span lang="en">Haskell</span>98 の拡張や派生物を作成することを、委員会ははっきりと歓迎した<sup id="cite_ref-Pref_98_3-1" class="reference"><a href="#cite_note-Pref_98-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>。 </p> <div class="mw-heading mw-heading3"><h3 id="Haskell_98"><span lang="en">Haskell</span> 98</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=4" title="節を編集: Haskell 98"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/1999%E5%B9%B4" title="1999年">1999年</a>2月、<span lang="en">Haskell</span> 98 言語標準は最初に <span lang="en">The Haskell 98 Report</span> として発表された<sup id="cite_ref-Pref_98_3-2" class="reference"><a href="#cite_note-Pref_98-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>。<a href="/wiki/2003%E5%B9%B4" title="2003年">2003年</a>1月、改定されたバージョンが <span lang="en">Haskell 98 Language and Libraries: The Revised Report</span> として発表された<sup id="cite_ref-Revised_report_5-0" class="reference"><a href="#cite_note-Revised_report-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>。GHC に代表されるように、<span lang="en">Haskell</span> は急速に発達しつづけている。 </p> <div class="mw-heading mw-heading3"><h3 id="Haskell′"><span id="Haskell.E2.80.B2"></span><span lang="en">Haskell′</span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=5" title="節を編集: Haskell′"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/2006%E5%B9%B4" title="2006年">2006年</a>前半、非公式に <span lang="en"><b>Haskell′</b></span>(<span lang="en">Haskell Prime</span>)と呼ばれている <span lang="en">Haskell</span> 98 <span lang="en">standard</span> の後継の作成プロセスが開始された<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>。このプロセスは <span lang="en">Haskell</span> 98 のマイナーバージョンアップを目的としている<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>。 </p> <div class="mw-heading mw-heading3"><h3 id="Haskell_2010"><span lang="en">Haskell</span> 2010</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=6" title="節を編集: Haskell 2010"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><span lang="en">Haskell</span> 2010 は他のプログラミング言語とのバインディングを可能にする <span lang="en">Foreign Function Interface</span>(FFI)を <span lang="en">Haskell</span> に追加し, いくつかの構文上の問題を修正する(正式な構文を変更する)。「<code>n + k</code> パターン」と呼ばれる構文を削除し, <code>fak (n+1) = (n+1) * fak n</code>というような形式の定義はもはや許されない。<span lang="en">Haskell</span> に <span lang="en">Haskell</span> 2010 のソースかどうかや, いくつかの必要な拡張の指定を可能にする言語プラグマ構文拡張<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>を導入する。<span lang="en">Haskell</span> 2010 に導入された拡張の名前は, <code>DoAndIfThenElse</code>, <code>HierarchicalModules</code>(階層化ライブラリ), <code>EmptyDataDeclarations</code>, <code>FixityResolution</code>, <code>ForeignFunctionInterface</code>, <code>LineCommentSyntax</code>, <code>PatternGuards</code>, <code>RelaxedDependencyAnalysis</code>, <code>LanguagePragma</code>, <code>NoNPlusKPatterns</code> である。 </p> <div class="mw-heading mw-heading2"><h2 id="主な構文"><span id=".E4.B8.BB.E3.81.AA.E6.A7.8B.E6.96.87"></span>主な構文</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=7" title="節を編集: 主な構文"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>ここでは以降の解説を読む上で必要な <span lang="en">Haskell</span> の文法規則を簡単に説明する。<span lang="en">Haskell</span> の構文は数学で用いられるものによく似せられていることに注意されたい。 </p> <div class="mw-heading mw-heading3"><h3 id="型"><span id=".E5.9E.8B"></span>型</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=8" title="節を編集: 型"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><span lang="en">Haskell</span> の型名は先頭が大文字でなければならない。標準で存在する単純なデータ型としては、<code>Bool</code>(真偽値)型、<code>Int</code>(整数)型、<code>Float</code>(単精度浮動小数点数)型、<code>Char</code>(文字)型、<code>String</code>(文字列)型などが予め定義されている。任意の式の型を定義するには、式と型の間に <code>::</code> 記号をおく。また、変数などのシンボル<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>を定義する際に変数名を式に指定して書くことで、その変数の型を指定することができる。例えば、次は<a href="/wiki/%E5%86%86%E5%91%A8%E7%8E%87" title="円周率">円周率</a>および<a href="/wiki/%E3%83%8D%E3%82%A4%E3%83%94%E3%82%A2%E6%95%B0" title="ネイピア数">ネイピア数</a>を定数として定義し、さらにその型も浮動小数点型として指定している。<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">pi</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Float</span> <span class="nf">pi</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="mf">3.1415926535</span> <span class="nf">e</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="mf">2.7182818284</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Float</span><span class="w"> </span><span class="c1">-- 式の中でその型を指定している</span> </pre></div> <p>関数の型は、各引数の間を <code>-></code> 記号で区切って表記する。関数は引数をひとつ適用するたびに、その型は <code>-></code> で区切られたうちの一番左が消えた型となると考えればよい。<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>例えば、ふたつの整数を引数にとりその最大公約数を返す関数 <code>gcd</code> の型は次のように定義される。<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">gcd</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Int</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Int</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Int</span><span class="w"> </span><span class="c1">-- 関数名 :: 引数1の型 -> 引数2の型 -> 返り値の型</span> </pre></div> <p>型変数を使い、型を抽象化することもできる。これは <span lang="en">C++</span> のテンプレートや <span lang="en">Java</span> のジェネリクスに相当するが、様々な種(型の型)に適用できるためより柔軟である。例えば、<code>a</code> 型の値をとり、それをそのまま返す恒等関数 <code>id</code> を型の指定とともに定義すると以下のようになる。ここで任意の型を示す型名 <code>a</code> が定義に使われているが、このように先頭が小文字で始まっている型名は具体的な型名ではなく型変数である。この関数はあらゆる型の値を引数にとることができる。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">id</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="n">a</span> <span class="nf">id</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">x</span> </pre></div> <p>また、データ型はパラメータとして型変数を持つことができる。例えば、スタックやハッシュテーブルなどのデータ型は、その要素の型を型変数として定義する。ハッシュテーブルを実装するデータ型 <code>HashMap :: * -> * -> *</code> があり、キーに文字列(<code>String</code>)、値に整数(<code>Int</code>)を持つハッシュテーブル <code>hashtable</code> の型は次のようになる。<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">hashtable</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">HashMap</span><span class="w"> </span><span class="kt">String</span><span class="w"> </span><span class="kt">Int</span> </pre></div> <p>そのほか、特殊な表記を持つ型として<a href="/wiki/%E3%83%AA%E3%82%B9%E3%83%88_(%E6%8A%BD%E8%B1%A1%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B)" title="リスト (抽象データ型)">リスト</a>と<a href="/wiki/%E3%82%BF%E3%83%97%E3%83%AB" title="タプル">タプル</a>、<a href="/wiki/%E6%96%87%E5%AD%97%E5%88%97" title="文字列">文字列</a>がある。リストは <span lang="en">Haskell</span> で極めて頻繁に用いられるため、<a href="/wiki/%E7%B3%96%E8%A1%A3%E6%A7%8B%E6%96%87" title="糖衣構文">特別な構文</a>が用意されている。リストは要素の型を角括弧で囲む。次は <code>Char</code>(文字)のリストを束縛する変数 <code>text</code> の定義である。<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup>文字のリストは文字列と等価である。2行目にあるように、文字列は殆どのプログラミング言語と同じように二重引用符で囲む。コメントにHaskellでのリストの表記を添えた。最後にデシュガー(糖衣構文を元の表記に戻すこと)したリストの表記法を示した。textもhelloも等価である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">text</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="p">[</span><span class="kt">Char</span><span class="p">]</span> <span class="nf">text</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="s">"Hello"</span><span class="w"> </span><span class="c1">-- ['H','e','l','l','o'] の糖衣構文</span> <span class="nf">hello</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="p">[</span><span class="kt">Char</span><span class="p">]</span> <span class="nf">hello</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="sc">'H'</span><span class="kt">:</span><span class="sc">'e'</span><span class="kt">:</span><span class="sc">'l'</span><span class="kt">:</span><span class="sc">'l'</span><span class="kt">:</span><span class="sc">'o'</span><span class="kt">:[]</span> </pre></div> <p>タプルは要素の型をカンマで区切り、括弧で囲む。次は <code>Float</code>(浮動小数点数)の値をもつ2次元座標のタプルが束縛される変数 <code>point</code> の定義である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">point</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="p">(</span><span class="kt">Float</span><span class="p">,</span><span class="kt">Float</span><span class="p">)</span> <span class="nf">point</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">)</span> </pre></div> <p>タプルは2以上ならいくつでも要素を持つことができる。1要素のタプルは優先順位の括弧と表記が衝突し、また用途がないので存在しない。要素数がゼロのタプルは特に「ユニット」(<code>Unit</code>) と呼ばれ、有効な値を持たないなどの時に使われる。<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> </p><p><code>type</code> キーワードを用いて、型に別名をつけることができる。<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup>次は <code>[Char]</code> に <code>String</code> という別名をつけている。<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="kr">type</span><span class="w"> </span><span class="kt">String</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="p">[</span><span class="kt">Char</span><span class="p">]</span> <span class="nf">text</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">String</span> </pre></div><p>Haskellの型は<b>型構築子</b>(型コンストラクタ、<i><b>type constructor</b></i>)から構築される<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup>。型構築子<code>T</code>に型変数(Type variables)<code>v1 v2 vN</code>を与え型式(type expression)<code>T v1 v2 vN</code>として評価することで型が構築される。型構築子の例には以下が挙げられる。 </p><table class="wikitable"> <caption>表: 型構築子の分類と例 </caption> <tbody><tr> <th><a href="/wiki/%E3%82%AB%E3%82%A4%E3%83%B3%E3%83%89_(%E5%9E%8B%E7%90%86%E8%AB%96)" title="カインド (型理論)">カインド</a> </th> <th>総称 </th> <th>例 </th> <th>出典 </th></tr> <tr> <td>* </td> <td>nullary type constructors, type constants </td> <td><code>Int</code>, <code>Bool</code> </td> <td><sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup> </td></tr> <tr> <td>* -> * </td> <td>unary type constructors </td> <td><code>Maybe</code>, <code>IO</code> </td> <td><sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> </td></tr> <tr> <td>* -> * -> * </td> <td>binary type constructors </td> <td><code>Either</code> </td> <td> </td></tr></tbody></table> <p>例えば型構築子<code>Maybe</code>に型変数<code>Int</code>を渡し、<code>Maybe Int</code>とすることで型が構築される。 </p> <div class="mw-heading mw-heading3"><h3 id="関数と演算子"><span id=".E9.96.A2.E6.95.B0.E3.81.A8.E6.BC.94.E7.AE.97.E5.AD.90"></span>関数と演算子</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=9" title="節を編集: 関数と演算子"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>関数名は先頭が小文字でなければならず、記号を含むことはできない。演算子名は記号のみで構成されていなければならない。関数の定義ではC言語のような引数を囲む括弧や区切りのカンマは使われず、単に引数を空白文字で区切って表記する。次は先程示した恒等関数 <code>id</code> に、型の定義に加えて本体の定義もした例である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">id</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="n">a</span> <span class="nf">id</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="c1">-- 関数名 仮引数1 仮引数2 &hellip; = 関数本体の式</span> </pre></div> <p>関数の適用も同様で、単に関数に続いて空白文字で区切った引数を並べればよい。以下では上記の恒等関数 <code>id</code> を(ここでは使う必要はないが)適用して、別の変数を定義した例である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">hoge</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="s">"piyo"</span><span class="w"> </span><span class="c1">-- hoge == "piyo" となる。</span> </pre></div> <p>引数がつねに2個であることや引数の間に演算子をおくことなどを除けば、演算子についても関数の定義や適用と同様である。標準で定義されている算術演算子を使って、<a href="/wiki/%E3%83%9C%E3%83%87%E3%82%A3%E3%83%9E%E3%82%B9%E6%8C%87%E6%95%B0" title="ボディマス指数">BMI</a>を計算する関数 <code>bmi</code> を定義してみる。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">bmi</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Float</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Float</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Float</span> <span class="nf">bmi</span><span class="w"> </span><span class="n">weight</span><span class="w"> </span><span class="n">height</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">weight</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">height</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="mi">2</span> </pre></div> <p>この定義では <code>Float</code> を引数にとり <code>Float</code> で結果を返すが、この関数では <code>Double</code> を引数に使うことはできない。どの浮動小数点数型でも扱えるような関数にするには、次のように型変数を使えばよい。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">bmi</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Floating</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow">=></span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="n">a</span> <span class="nf">bmi</span><span class="w"> </span><span class="n">weight</span><span class="w"> </span><span class="n">height</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">weight</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">height</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="mi">2</span> </pre></div> <p>このバージョンの関数 <code>bmi</code> では引数や返り値の型が <code>a</code> とされているが、これにさらに <code>a</code> は <code>Floating</code> であるとの制約をつけている。<code>Floating</code> は <code>Float</code> や <code>Double</code> を抽象化する型クラスであり <code>/</code> や <code>^</code> といった演算子を適用できるので、<code>bmi</code> の定義においてこれらの演算子を使うことができている。また、整数などの値は引数に取れないし、返り値は引数に与えた型で戻ってくる。 </p><p>関数と演算子は新たに定義し直さなくても相互に変換可能である。関数を演算子として使うには、関数を <code>`</code> (バッククォート)で囲む。逆に、演算子を関数として使うには括弧で囲む。例えば、整数を除算する関数 <code>div</code> はよく演算子として使われる<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup>。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">aspectRatio</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">width</span><span class="w"> </span><span class="p">`</span><span class="n">div</span><span class="p">`</span><span class="w"> </span><span class="n">height</span> </pre></div> <p>なお、関数適用の優先順位はすべての<a href="/wiki/%E6%BC%94%E7%AE%97%E5%AD%90%E3%81%AE%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D" title="演算子の優先順位">演算子の優先順位</a>よりも高い。 </p> <div class="mw-heading mw-heading2"><h2 id="特徴的な機能"><span id=".E7.89.B9.E5.BE.B4.E7.9A.84.E3.81.AA.E6.A9.9F.E8.83.BD"></span>特徴的な機能</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=10" title="節を編集: 特徴的な機能"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>ここではあまり他の言語では見られない <span lang="en">Haskell</span> 特有の機能を中心に解説する。ここでは説明していないが、現代的な実用言語では常識となっている<a href="/wiki/%E3%82%AC%E3%83%BC%E3%83%99%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3" class="mw-redirect" title="ガーベジコレクション">ガーベジコレクション</a>、<a href="/wiki/%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86" title="例外処理">例外処理</a>、<a href="/wiki/%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB" title="モジュール">モジュール</a>、外部関数の呼び出し、<a href="/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE" title="正規表現">正規表現</a>ライブラリなどの機能は、<span lang="en">Haskell</span> にも当然存在している。 </p> <div class="mw-heading mw-heading3"><h3 id="遅延評価"><span id=".E9.81.85.E5.BB.B6.E8.A9.95.E4.BE.A1"></span>遅延評価</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=11" title="節を編集: 遅延評価"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><span lang="en">Haskell</span> は<a href="/wiki/%E9%81%85%E5%BB%B6%E8%A9%95%E4%BE%A1" title="遅延評価">遅延評価</a>を基本的な評価戦略とする。ほとんどの言語では関数の呼び出しにおいて引数に与えられたすべての式を評価してから呼び出された関数に渡す<a href="/wiki/%E5%85%88%E8%A1%8C%E8%A9%95%E4%BE%A1" title="先行評価">先行評価</a>を評価戦略とするが、これに対し <span lang="en">Haskell</span> ではあらゆる式はそれが必要になるまで評価されない。次の定数 <code>answer</code> は評価すると常に <code>42</code> を返すが、その定義には未定義の式を含む。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">answer</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">const</span><span class="w"> </span><span class="mi">42</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="p">`</span><span class="n">div</span><span class="p">`</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span> </pre></div> <p>ここで、<code>const</code> は常に第1<a href="/wiki/%E5%BC%95%E6%95%B0" title="引数">引数</a>を返す<a href="/wiki/%E5%AE%9A%E6%95%B0" title="定数">定数</a>関数である。また、<code>`div`</code> は整数の除算を行う演算子であり、<code>1 `div` 0</code> は <code>1 / 0</code> に相当し、この値は未定義であり、この部分を評価すればエラーになる。正格評価をする言語でこのような式を評価しようとすると、<a href="/wiki/%E3%82%BC%E3%83%AD%E9%99%A4%E7%AE%97" title="ゼロ除算">ゼロ除算</a>によるエラーになるであろう。しかし 上記の定数 <code>answer</code> を評価してもエラーにはならない。<code>const</code> は第1引数をつねに返すので第2引数を評価する必要はなく、第2引数に与えられた式 <code>1 `div` 0</code> は無視されるので評価されないからである。遅延評価がデフォルトで行われることにより、不要な計算は省かれ、<a href="/wiki/%E5%8F%82%E7%85%A7%E9%80%8F%E9%81%8E%E6%80%A7" title="参照透過性">参照透過性</a>により同じ式を複数回評価する必要もなくなるため、<span lang="en">Haskell</span> では最適化によって計算効率の向上が期待できる場合がある。ただし、頻繁に新たな値を計算する場合は正格評価のほうが効率がよく、必要に応じて<code>seq</code>関数やBangPatterns拡張による明示により正格評価もできる。 </p> <div class="mw-heading mw-heading3"><h3 id="型推論"><span id=".E5.9E.8B.E6.8E.A8.E8.AB.96"></span>型推論</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=12" title="節を編集: 型推論"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><span lang="en">Haskell</span> では<a href="/wiki/%E3%82%B5%E3%83%96%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3#関数" title="サブルーチン">関数</a>の<a href="/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B" title="データ型">データ型</a>を明示しなくても処理系が自動的に型を推論する。以下は型の宣言を省略し、本体のみを宣言した引数の平方を返す関数 <code>square</code> である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">square</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">x</span> </pre></div> <p>この場合 <code>square</code> の型は型推論され、次のように明示的に型を宣言したのと同じになる。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">square</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="p">(</span><span class="kt">Num</span><span class="w"> </span><span class="n">a</span><span class="p">)</span><span class="w"> </span><span class="ow">=></span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="n">a</span> <span class="nf">square</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">x</span> </pre></div> <p>この宣言は、「<code>Num</code>のインスタンス<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup>である <code>a</code> の型の値を引数にとり、<code>a</code> の型の値を返す」と読める。ここでは「<code>*</code>」<a href="/wiki/%E6%BC%94%E7%AE%97%E5%AD%90_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E8%A8%80%E8%AA%9E)" title="演算子 (コンピュータ言語)">演算子</a>が適用可能な最も広い型である <code>Num a</code> が選択されており、整数や浮動小数点数、有理数のような <code>Num</code> のインスタンスであるあらゆる型の値を渡すことができる。外部に公開するような関数を定義するときは、型推論によって自動的に選択される最も広い型では適用可能な範囲が広すぎる場合もある。<code>Integer</code> のみを渡せるように制限する場合は、次のように明示的に型を宣言すればよい。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">square</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Integer</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Integer</span> <span class="nf">square</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">x</span> </pre></div> <p>型推論のため、<span lang="en">Haskell</span> は型安全でありながらほとんどの部分で型宣言を省略できる<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup>。なお、次のコードは型宣言が必要な例である。<code>read</code> は文字列をその文字列があらわすデータ型に変換する抽象化された関数である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">main</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">print</span><span class="w"> </span><span class="p">(</span><span class="n">read</span><span class="w"> </span><span class="s">"42"</span><span class="p">)</span><span class="w"> </span><span class="c1">-- コンパイルエラー!</span> </pre></div> <p>このコードはコンパイルエラーになる。<code>read</code> は複数のインスタンスで実装されており、数値なら数値型に変換する <code>read</code>、リストならリストに変換する <code>read</code> というように型ごとに実装が存在する。<span lang="en">Haskell</span> の型は総て静的に決定されなければならない。このコード場合、プログラマは </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">read</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">String</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Int</span> </pre></div> <p>という型をもつ実装の <code>read</code> が選択されると期待しているであろうが、これはコンパイラによる静的な型検査では決定できない。つまり、<span lang="en">Haskell</span> コンパイラは <code>read</code> の返り値を受け取っている関数 <code>print</code> の型を検査し多数の実装の中から適切な <code>read</code> を選択しようとするが、<code>print</code> は <code>Show</code> のインスタンスが存在するあらゆる型を引数にとるため、型推論によっても <code>read</code> の型を一意に決定できない。これを解消するひとつの方法は、<code>::</code> によって型を明示することである。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">main</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">print</span><span class="w"> </span><span class="p">((</span><span class="n">read</span><span class="w"> </span><span class="s">"42"</span><span class="p">)</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Int</span><span class="p">)</span><span class="w"> </span><span class="c1">-- コンパイル成功!read の返り値を Int と明示している</span> </pre></div> <p>また、そもそも <code>read</code> の返り値を整数型しか取らない関数に与えていればあいまいさは生じず、型推論は成功する。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">printIntOnly</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Int</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">IO</span><span class="w"> </span><span class="nb">()</span> <span class="nf">printIntOnly</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">print</span><span class="w"> </span><span class="n">x</span> <span class="nf">main</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">printIntOnly</span><span class="w"> </span><span class="p">(</span><span class="n">read</span><span class="w"> </span><span class="s">"42"</span><span class="p">)</span><span class="w"> </span><span class="c1">-- コンパイル成功!</span> </pre></div> <p>他の言語、たとえば <span lang="en">Java</span> でこのような抽象的な関数を書こうとしても、<span lang="en">Java</span> では返り値の値の型によって関数を選択するようなことはできない(引数の型によって選択するメソッドのオーバーロードは存在する)。そのため、関数の実装ごとに別の名前をつけてプログラマに明示的に選択させて解決させることになる<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup>。この方法は簡潔でわかりやすいが、抽象性の高さに基づく再利用性という点では <span lang="en">Haskell</span> のような多相には劣ってしまう。 </p> <div class="mw-heading mw-heading3"><h3 id="代数的データ型"><span id=".E4.BB.A3.E6.95.B0.E7.9A.84.E3.83.87.E3.83.BC.E3.82.BF.E5.9E.8B"></span>代数的データ型</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=13" title="節を編集: 代数的データ型"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><span lang="en">Haskell</span> のデータ型には<a href="/wiki/%E4%BB%A3%E6%95%B0%E7%9A%84%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B" title="代数的データ型">代数的データ型</a><sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup>と呼ばれる、C言語などでいう構造体や列挙体の性質を兼ね備えたものが用いられる。次の例は二つのInt型の値をフィールドに持つ二次元の座標、<code>Point2D</code> 型を定義したもので、これは代数的データ型の構造体的な性質を示す。先頭のトークン「<code>data</code>」は代数的データ型の宣言であることを示す予約語である。ここで最初の <code>Point2D</code> はデータ型名を表し、次の <code>Point2D</code> はデータコンストラクタ名を示す<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup>。</p><div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="kr">data</span><span class="w"> </span><span class="kt">Point2D</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">Point2D</span><span class="w"> </span><span class="kt">Int</span><span class="w"> </span><span class="kt">Int</span> <span class="nf">origin</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Point2D</span> <span class="nf">origin</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">Point2D</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="c1">-- データコンストラクタは関数のように適用できる</span> </pre></div> <p>データコンストラクタは値を定義するための特殊な関数といえる。データコンストラクタは後述するパターンマッチによって値を取り出す際にも用いられる。 </p><p>次の例は<a href="/wiki/%E3%83%88%E3%83%A9%E3%83%B3%E3%83%97" title="トランプ">トランプ</a>の4つの<a href="/wiki/%E3%82%B9%E3%83%BC%E3%83%88" title="スート">スーツ</a>を示す <code>Suit</code> 型を定義したものである。<code>Spade</code>、<code>Heart</code>、<code>Club</code>、<code>Diamond</code> の4つのデータコンストラクタが定義されており、<code>Suit</code> 型の式は <code>Spade</code>、<code>Heart</code>、<code>Club</code>、<code>Diamond</code> のいずれかの値をとる。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="kr">data</span><span class="w"> </span><span class="kt">Suit</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">Spade</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="kt">Heart</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="kt">Club</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="kt">Diamond</span> </pre></div> <p>次の例は <code>String</code> 型の値を格納する<a href="/wiki/%E4%BA%8C%E5%88%86%E6%9C%A8" title="二分木">二分木</a>の型である。<code>Leaf</code>(葉)は <code>String</code> 型の値を持ち、<code>Branch</code>(枝)は <code>Leaf</code> もしくは <code>Branch</code> である <code>Tree</code> 型の変数を二つ持つ。これは代数的データ型の構造体的な性質と列挙体的な性質の両方が現れている。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="kr">data</span><span class="w"> </span><span class="kt">Tree</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">Leaf</span><span class="w"> </span><span class="kt">String</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="kt">Branch</span><span class="w"> </span><span class="kt">Tree</span><span class="w"> </span><span class="kt">Tree</span> <span class="nf">organisms</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Tree</span> <span class="nf">organisms</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">Branch</span><span class="w"> </span><span class="n">animals</span><span class="w"> </span><span class="n">plants</span><span class="w"> </span><span class="c1">-- Branch (Branch (Branch (Leaf "Lion") (Leaf "Tiger")) (Leaf "Wolf")) (Leaf "Cherry")</span> <span class="nf">animals</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">Branch</span><span class="w"> </span><span class="n">cats</span><span class="w"> </span><span class="p">(</span><span class="kt">Leaf</span><span class="w"> </span><span class="s">"Wolf"</span><span class="p">)</span> <span class="nf">cats</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">Branch</span><span class="w"> </span><span class="p">(</span><span class="kt">Leaf</span><span class="w"> </span><span class="s">"Lion"</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="kt">Leaf</span><span class="w"> </span><span class="s">"Tiger"</span><span class="p">)</span> <span class="nf">plants</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">Leaf</span><span class="w"> </span><span class="s">"Cherry"</span> </pre></div> <p>GADTと呼ばれる機能を使うと、コンストラクタの型を明示してデータ型を定義することもできる。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="cm">{-# LANGUAGE GADTs #-}</span> <span class="kr">data</span><span class="w"> </span><span class="kt">Male</span> <span class="kr">data</span><span class="w"> </span><span class="kt">Female</span> <span class="kr">data</span><span class="w"> </span><span class="kt">Person</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="kr">where</span> <span class="w"> </span><span class="kt">Adam</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Person</span><span class="w"> </span><span class="kt">Male</span> <span class="w"> </span><span class="kt">Eve</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Person</span><span class="w"> </span><span class="kt">Female</span> <span class="w"> </span><span class="kt">Child</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Person</span><span class="w"> </span><span class="kt">Male</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Person</span><span class="w"> </span><span class="kt">Female</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Int</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Person</span><span class="w"> </span><span class="n">a</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="無名関数"><span id=".E7.84.A1.E5.90.8D.E9.96.A2.E6.95.B0"></span>無名関数</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=14" title="節を編集: 無名関数"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><span lang="en">Haskell</span> は<a href="/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E9%96%A2%E6%95%B0" title="第一級関数">第一級関数</a>をサポートしており、<a href="/wiki/%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0" title="高階関数">高階関数</a>を定義することができる。つまり、関数の引数として関数を与えたり、返り値として関数を返すことができる。無名関数は <code>\</code> (バックスラッシュ)から始まり、それに続いて引数となる変数、引数と本体のあいだに <code>-></code> 記号をおく。<code>List</code> モジュールに定義されているリストのソートを行う関数 <code>sortBy</code> は、二つの要素に大小関係を与える関数を引数にとるが、無名関数を使うと例えばリストをその長さの短い順にソートする関数 <code>sortList</code> は次のように定義できる。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">sortList</span><span class="w"> </span><span class="n">xs</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">sortBy</span><span class="w"> </span><span class="p">(</span><span class="nf">\</span><span class="n">as</span><span class="w"> </span><span class="n">bs</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="n">compare</span><span class="w"> </span><span class="p">(</span><span class="n">length</span><span class="w"> </span><span class="n">as</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">length</span><span class="w"> </span><span class="n">bs</span><span class="p">))</span><span class="w"> </span><span class="n">xs</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="関数のカリー化と部分適用"><span id=".E9.96.A2.E6.95.B0.E3.81.AE.E3.82.AB.E3.83.AA.E3.83.BC.E5.8C.96.E3.81.A8.E9.83.A8.E5.88.86.E9.81.A9.E7.94.A8"></span>関数のカリー化と部分適用</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=15" title="節を編集: 関数のカリー化と部分適用"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><span lang="en">Haskell</span> において、2つの引数を持つ関数は、1つの引数をとり「1つの引数をとる関数」を返す関数と同義である。このように、関数を返すことで全ての関数を1つの引数の関数として表現することを<a href="/wiki/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96" title="カリー化">カリー化</a>という。(あえてタプルを使うことで複数の引数を渡すような見かけにすることもできるが。)次の例は2つの引数をとり、そのうち値が大きい値を返す関数 <code>max</code> である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">max</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kr">if</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="kr">then</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="kr">else</span><span class="w"> </span><span class="n">b</span> </pre></div><p> この関数maxは無名関数を用いて次のように書き換えることができる。先ほどの表現とまったく同様に動作するが、この表現では関数を返す様子がより明らかになっている。</p><div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">max</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="nf">\</span><span class="n">b</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kr">if</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="kr">then</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="kr">else</span><span class="w"> </span><span class="n">b</span> </pre></div> <p>さらに、次のようにも書き換えることができる。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">max</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="nf">\</span><span class="n">a</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="nf">\</span><span class="n">b</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kr">if</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="kr">then</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="kr">else</span><span class="w"> </span><span class="n">b</span> </pre></div> <p>あるいは、<code>f x = ... x ... </code>は、<code> f = (\x -> ... x ...) </code>の<a href="/wiki/%E7%B3%96%E8%A1%A3%E6%A7%8B%E6%96%87" title="糖衣構文">糖衣構文</a>であるとも言える。このため、<span lang="en">Haskell</span> の定義は変数に束縛するのが定数であるか関数であるかにかかわらず、「変数 = 値」という一貫した形でも定義できる。 </p><p>カリー化によって、<span lang="en">Haskell</span> のあらゆる関数は引数を部分適用することができる。つまり、関数の引数の一部だけを渡すことで、一部の変数だけが適用された別の関数を作り出すことができる。また、<span lang="en">Haskell</span> では演算子を部分適用することすら可能であり、演算子の部分適用をとくにセクション<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup>と呼ぶ。 </p><p>任意のリストをとり、その要素から条件にあう要素のみを取り出す関数 <code>filter</code> が標準ライブラリに定義されている。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">filter</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Bool</span><span class="p">)</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="p">[</span><span class="n">a</span><span class="p">]</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="p">[</span><span class="n">a</span><span class="p">]</span> </pre></div> <p>この関数では第一引数に残す要素を判定する関数をとるが、このときに部分適用を使えばそのような関数を簡潔に書くことができる。整数のリストから正の値のみを取り出す関数 <code>positives</code> は次のように定義できる。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">positives</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="p">[</span><span class="kt">Int</span><span class="p">]</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="p">[</span><span class="kt">Int</span><span class="p">]</span> <span class="nf">positives</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">filter</span><span class="w"> </span><span class="p">(</span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span> <span class="nf">ps</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">positives</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p">]</span><span class="w"> </span><span class="c1">-- [5, 3, 9]</span> </pre></div> <p>ここで、<code>positives</code> および <code>filter</code> の第2引数はソースコード上に現れずに記述できているが、このように単純に書けるのもカリー化の恩恵によるものである。 </p> <div class="mw-heading mw-heading3"><h3 id="パターンマッチ"><span id=".E3.83.91.E3.82.BF.E3.83.BC.E3.83.B3.E3.83.9E.E3.83.83.E3.83.81"></span>パターンマッチ</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=16" title="節を編集: パターンマッチ"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><span lang="en">Haskell</span> では関数の引数を様々な形で受け取ることができる。 </p><p>次は整数の要素をもつリストの全要素の合計を返す関数 <code>total</code> である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">total</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="p">[</span><span class="kt">Int</span><span class="p">]</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Int</span> <span class="nf">total</span><span class="w"> </span><span class="kt">[]</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="mi">0</span> <span class="nf">total</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="kt">:</span><span class="n">xs</span><span class="p">)</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">total</span><span class="w"> </span><span class="n">xs</span> </pre></div> <p><code>total</code> の関数本体の定義がふたつあるが、このうち引数の実行時の値と適合する本体が選択され呼び出される。上の本体定義では、引数が空のリストであるときのみ適合し、呼び出される。下の本体定義では、引数が少なくともひとつの要素を持つとき適合し、<code>x</code> に先頭の要素が束縛され、<code>xs</code> に残りのリストが束縛される。この例の場合はパターンに漏れはないが、もし適合するパターンが見つからない場合はエラーになる。 </p><p>複数の返り値を扱うのもタプルなどを利用して極めて簡明に書くことができる。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p">)</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">20</span><span class="p">)</span> </pre></div> <p>このとき、定義される変数は <code>x</code> および <code>y</code> で、それぞれ <code>x</code> は <code>10</code> に、<code>y</code> は <code>20</code> に定義される。 </p> <div class="mw-heading mw-heading3"><h3 id="リストとリスト内包表記"><span id=".E3.83.AA.E3.82.B9.E3.83.88.E3.81.A8.E3.83.AA.E3.82.B9.E3.83.88.E5.86.85.E5.8C.85.E8.A1.A8.E8.A8.98"></span>リストとリスト内包表記</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=17" title="節を編集: リストとリスト内包表記"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><span lang="en">Haskell</span> で順序付けられた複数の値を扱うのにもっとも柔軟で簡潔な方法は<a href="/wiki/%E3%83%AA%E3%82%B9%E3%83%88_(%E6%8A%BD%E8%B1%A1%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B)" title="リスト (抽象データ型)">リスト</a>を用いることである。次は四季の名前のリストである。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="p">[</span><span class="s">"Spring"</span><span class="p">,</span><span class="w"> </span><span class="s">"Summer"</span><span class="p">,</span><span class="w"> </span><span class="s">"Autumn"</span><span class="p">,</span><span class="w"> </span><span class="s">"Winter"</span><span class="p">]</span> </pre></div> <p>次は初項10、公差4の等差数列のリストである。このリストは無限リストであり、その長さは無限大である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="p">[</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">14</span><span class="o">..</span><span class="p">]</span> </pre></div> <p>次の式は先ほどの数列の先頭20項を要素に持つリストである。<code>take n l</code> はリスト <code>l</code> の先頭 <code>n</code> 個の項を要素に持つリストを返す関数である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">take</span><span class="w"> </span><span class="mi">20</span><span class="w"> </span><span class="p">[</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">14</span><span class="o">..</span><span class="p">]</span> </pre></div> <p>もし正格な動作を持つ言語でこのような定義をしようとすると関数 <code>take</code> に値を渡す前に無限リストを生成することになるが、長さが無限のため無限リストの生成が終わることはなく関数 <code>take</code> がいつまでも呼び出されなくなってしまう。<span lang="en">Haskell</span> は遅延評価されるため、このようなリストを定義しても必要になるまで必要な項の値の生成は遅延される。このように無限リストを扱えるのは <span lang="en">Haskell</span> の大きな強みである。次は<a href="/wiki/%E7%B4%A0%E6%95%B0" title="素数">素数</a>列を<a href="/wiki/%E3%83%AA%E3%82%B9%E3%83%88%E5%86%85%E5%8C%85%E8%A1%A8%E8%A8%98" title="リスト内包表記">リスト内包表記</a>を用いて定義した一例である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">primes</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="p">[</span><span class="kt">Int</span><span class="p">]</span> <span class="w"> </span><span class="n">primes</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="p">[</span><span class="n">x</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="ow"><-</span><span class="w"> </span><span class="p">[</span><span class="mi">2</span><span class="o">..</span><span class="p">],</span><span class="w"> </span><span class="n">and</span><span class="w"> </span><span class="p">[</span><span class="n">rem</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">/=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="ow"><-</span><span class="w"> </span><span class="p">[</span><span class="mi">2</span><span class="w"> </span><span class="o">..</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">]]]</span> </pre></div> <p>リストはその柔軟性から再帰的な関数での値の受け渡しに向いているが、任意の位置の要素にアクセスするためには参照を先頭からたどる必要があるのでランダムアクセスが遅い、要素を変更するたびにリストの一部を作り直さなければならないなどの欠点がある。このため <span lang="en">Haskell</span> にも<a href="/wiki/%E9%85%8D%E5%88%97" title="配列">配列</a>が用意されており、高速な参照や更新が必要なプログラムではリストの代わりに配列を用いることでパフォーマンスを改善できる可能性がある。 </p> <div class="mw-heading mw-heading3"><h3 id="型クラスとインスタンス"><span id=".E5.9E.8B.E3.82.AF.E3.83.A9.E3.82.B9.E3.81.A8.E3.82.A4.E3.83.B3.E3.82.B9.E3.82.BF.E3.83.B3.E3.82.B9"></span>型クラスとインスタンス</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=18" title="節を編集: 型クラスとインスタンス"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>型クラス<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup>は相異なるデータ型に共通したインターフェイスを持つ関数を定義する。例えば、順序づけることができる要素をもつリストを<a href="/wiki/%E3%82%BD%E3%83%BC%E3%83%88" title="ソート">ソート</a>できる関数 <code>sort</code> を定義することを考える。リストの要素のデータ型は関数 <code>sort</code> を定義するときには不明であり、その要素をどのように順序付けるかを予め決定しておくことはできない。数値型も文字列型もそれぞれのデータを順序付けることができるであろうが、共通してデータの順序を返す抽象的な関数 <code>order</code> を定義することができれば、それを用いてソートすることができる。 </p><p>まず型クラス <code>Comparer</code> を定義して、順序付ける関数 <code>order</code> の形式を定義する。値の順序を調べる関数 <code>order x y</code> は <code>x</code> → <code>y</code> が昇順のときは負の値、降順の時は正の値、<code>x</code> と <code>y</code> が等しいときは <code>0</code> を返すものとする。ここで <code>class</code> は型クラスの宣言であることを示す予約語である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="kr">class</span><span class="w"> </span><span class="kt">Comparer</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="kr">where</span> <span class="w"> </span><span class="n">order</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Int</span> </pre></div> <p>型クラスを実装するには、対象のデータ型に対してインスタンス宣言を行う。次は型 <code>a</code> の型クラス <code>Comparer</code> に対するインスタンスを宣言したものである。このインスタンス宣言により、<code>Enum</code> のインスタンスである任意の型のリストを辞書順に比較できる。例えば、文字列 <code>Char</code> は <code>Enum</code> のインスタンスの <code>Char</code> のリストであり、このインスタンス定義により <code>order</code> を適用することができるようになる。ここで関数 <code>fromEnum c</code> は文字 <code>c</code> を数値に変換する関数である。<code>Comparer</code> のインスタンスを定義する型 <code>a</code> を <code>Eq</code> および <code>Enum</code> のインスタンスを持つものに限定しているので(<code>(Eq a, Enum a) =></code> の部分)、インスタンス定義の内部で <code>Eq</code> の関数である <code>(/=)</code> や <code>Enum</code> の関数である <code>fromEnum</code> を使うことができている。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="kr">instance</span><span class="w"> </span><span class="p">(</span><span class="kt">Eq</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">Enum</span><span class="w"> </span><span class="n">a</span><span class="p">)</span><span class="w"> </span><span class="ow">=></span><span class="w"> </span><span class="kt">Comparer</span><span class="w"> </span><span class="p">[</span><span class="n">a</span><span class="p">]</span><span class="w"> </span><span class="kr">where</span> <span class="w"> </span><span class="n">order</span><span class="w"> </span><span class="kt">[]</span><span class="w"> </span><span class="kt">[]</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="mi">0</span> <span class="w"> </span><span class="n">order</span><span class="w"> </span><span class="kr">_</span><span class="w"> </span><span class="kt">[]</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="mi">1</span> <span class="w"> </span><span class="n">order</span><span class="w"> </span><span class="kt">[]</span><span class="w"> </span><span class="kr">_</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span> <span class="w"> </span><span class="n">order</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="kt">:</span><span class="n">xs</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">y</span><span class="kt">:</span><span class="n">ys</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">/=</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">fromEnum</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">fromEnum</span><span class="w"> </span><span class="n">y</span><span class="w"> </span> <span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">otherwise</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">order</span><span class="w"> </span><span class="n">xs</span><span class="w"> </span><span class="n">ys</span> </pre></div> <p>次にリストをクイックソートする関数 <code>sort</code> を示す。型クラスを用いて順序付ける関数 <code>order</code> を抽象化したため、このように型クラス <code>Comparer</code> のインスタンスを持つ全ての型の値に適用できる一般化されたソート関数を定義できるのである。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">sort</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Comparer</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow">=></span><span class="w"> </span><span class="p">[</span><span class="n">a</span><span class="p">]</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="p">[</span><span class="n">a</span><span class="p">]</span> <span class="w"> </span><span class="n">sort</span><span class="w"> </span><span class="kt">[]</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">[]</span> <span class="w"> </span><span class="n">sort</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="kt">:</span><span class="n">xs</span><span class="p">)</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">sort</span><span class="w"> </span><span class="p">[</span><span class="n">e</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">e</span><span class="w"> </span><span class="ow"><-</span><span class="w"> </span><span class="n">xs</span><span class="p">,</span><span class="w"> </span><span class="n">order</span><span class="w"> </span><span class="n">e</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">++</span><span class="w"> </span><span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="w"> </span><span class="o">++</span><span class="w"> </span><span class="n">sort</span><span class="w"> </span><span class="p">[</span><span class="n">e</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">e</span><span class="w"> </span><span class="ow"><-</span><span class="w"> </span><span class="n">xs</span><span class="p">,</span><span class="w"> </span><span class="n">order</span><span class="w"> </span><span class="n">e</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="mi">0</span><span class="p">]</span> </pre></div> <p>この関数 <code>sort</code> は次のように使う。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">main</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kr">do</span> <span class="w"> </span><span class="n">print</span><span class="w"> </span><span class="p">(</span><span class="n">sort</span><span class="w"> </span><span class="p">[</span><span class="s">"foo"</span><span class="p">,</span><span class="w"> </span><span class="s">"bar"</span><span class="p">,</span><span class="w"> </span><span class="s">"baz"</span><span class="p">])</span><span class="w"> </span><span class="c1">-- ["bar", "baz", "foo"] と出力される。</span> <span class="w"> </span><span class="n">print</span><span class="w"> </span><span class="p">(</span><span class="n">sort</span><span class="w"> </span><span class="p">[[</span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">]])</span><span class="w"> </span><span class="c1">-- [[1, 2], [5, 6], [5, 9]] と出力される。</span> </pre></div> <p><span lang="en">Haskell</span> のインスタンス宣言は複数の型に共通する操作を定義するという点で <span lang="en">Java</span> や <span lang="en">C#</span> の「インターフェイス」と似ているが、<span lang="en">Haskell</span> では既存の任意の型についてもインスタンスを定義できる点でもインターフェイスに比べて柔軟である。 </p> <div class="mw-heading mw-heading3"><h3 id="入出力"><span id=".E5.85.A5.E5.87.BA.E5.8A.9B"></span>入出力</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=19" title="節を編集: 入出力"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>すべての式が<a href="/wiki/%E5%8F%82%E7%85%A7%E9%80%8F%E9%81%8E%E6%80%A7" title="参照透過性">参照透過</a>である <span lang="en">Haskell</span> においては、<a href="/wiki/%E5%89%AF%E4%BD%9C%E7%94%A8_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0)" title="副作用 (プログラム)">副作用</a>を式の評価そのものでは表現できない。そのため、<span lang="en">Haskell</span> では<a href="/wiki/%E5%9C%8F%E8%AB%96" title="圏論">圏論</a>のアイデアを利用した<a href="/wiki/%E3%83%A2%E3%83%8A%E3%83%89_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)" title="モナド (プログラミング)">モナド</a>によって入出力が表現されており、<span lang="en">Haskell</span> でも最も特徴的な部分となっている。次は <span lang="en">Haskell</span> による <span lang="en"><a href="/wiki/Hello_world" title="Hello world">Hello world</a></span> の一例である。実際に単独で実行可能形式にコンパイルできる、小さいが完全なプログラムの一例にもなっている。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">main</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">IO</span><span class="w"> </span><span class="nb">()</span> <span class="w"> </span><span class="n">main</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">putStrLn</span><span class="w"> </span><span class="s">"Hello,World!"</span> </pre></div> <p><span lang="en">Haskell</span> は純粋関数型言語であり、<code>main</code> もやはり参照透過である(副作用はない)。しかし処理系は <code>main</code> として定義された <code>IO ()</code> 型の値をそのプログラムの動作を示す値として特別に扱う。<code>putStrLn</code> は標準出力に文字列を出力する動作を表す <code>IO ()</code> 型の値を返す関数であり、実行すると引数として渡された <code>Hello,World!</code> を出力する。次に標準入力から一行読み込み、そのまま標準出力に出力する<a href="/wiki/%E3%82%A8%E3%82%B3%E3%83%BC_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)" title="エコー (コンピュータ)">エコープログラム</a>を考える。次のような、C言語などのような表記はできない。<code>getLine</code> 関数は標準入力から一行読み取る関数である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">main</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">putStrLn</span><span class="w"> </span><span class="n">getLine</span><span class="w"> </span><span class="c1">--コンパイルエラー!</span> </pre></div> <p><code>getLine</code> と <code>putStrLn</code> はそれぞれ次のような型を持っている。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">getLine</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">IO</span><span class="w"> </span><span class="kt">String</span> <span class="w"> </span><span class="n">putStrLn</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">String</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">IO</span><span class="w"> </span><span class="nb">()</span> </pre></div> <p>純粋関数型である <span lang="en">Haskell</span> では <code>getLine</code> もやはり副作用はなく、<code>getLine</code> は一行読み込むという動作を表す値を常に返す。このように入出力の動作を表す値をアクション<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup>と呼ぶ。<code>getLine</code> が返すのは <code>String</code> そのものではなくあくまで <code>IO String</code> という型を持ったアクションであって、それを <code>putStrLn</code> の引数に与えることはできない。正しいエコープログラムの一例は次のようになる。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">main</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">IO</span><span class="w"> </span><span class="nb">()</span> <span class="w"> </span><span class="n">main</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">getLine</span><span class="w"> </span><span class="o">>>=</span><span class="w"> </span><span class="n">putStrLn</span> </pre></div> <p>ここでは演算子 <code>>>=</code> によってふたつのアクションを連結している。このとき、<code>main</code> は一行読み込みそれを出力するというアクションとなり、このプログラムを実行すると処理系は <code>main</code> が持つアクションの内容を実行する。このアクションを実行すると、<code>getLine</code> は一行読み込み、それを <code>putStrLn</code> に渡す。このとき、読み込まれたデータにこれらのアクションの外側からアクセスすることはできない。このため、この式は参照透過性を保つことができる。<sup id="cite_ref-30" class="reference"><a href="#cite_note-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup> </p><p>モナドは、Freeモナド、Operationalモナドと呼ばれる構造により、より単純なデータ型から導出することもできる。これにより、非常に強力な<a href="/wiki/%E4%BE%9D%E5%AD%98%E6%80%A7%E3%81%AE%E6%B3%A8%E5%85%A5" title="依存性の注入">依存性の注入</a>が実現できる。 </p> <div class="mw-heading mw-heading2"><h2 id="実例"><span id=".E5.AE.9F.E4.BE.8B"></span>実例</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=20" title="節を編集: 実例"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>以下の単純な例は関数型言語としての構文の実例にしばしば用いられるもので、<span lang="en">Haskell</span> で示された<a href="/wiki/%E9%9A%8E%E4%B9%97" title="階乗">階乗</a>関数である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">fac</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Integer</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Integer</span> <span class="w"> </span><span class="n">fac</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="mi">1</span> <span class="w"> </span><span class="n">fac</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">fac</span><span class="w"> </span><span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> </pre></div> <p>階乗を単一の条件による終端を伴う再帰的関数として表現している。これは<a href="/wiki/%E6%95%B0%E5%AD%A6" title="数学">数学</a>の<a href="/wiki/%E6%95%99%E7%A7%91%E6%9B%B8" title="教科書">教科書</a>でみられる階乗の表現に似ている。<span lang="en">Haskell</span> コードの大半は、その簡潔さと構文において基本的な数学的記法と似通っている。 </p><p>この階乗関数の1行目は関数の型を示すもので、省略可能である。これは「関数 <code>fac</code> は <code>Integer</code> から <code>Integer</code> へ(<code>Integer -> Integer</code>)の型を持つ(<code>::</code>)」と読める。これは整数を引数としてとり、別の整数を返す。もしプログラマが型注釈を与えない場合、この定義の型は自動的に推測される。 </p><p>2行目では <span lang="en">Haskell</span> の重要な機能であるパターンマッチングに頼っている。関数の<a href="/wiki/%E5%BC%95%E6%95%B0" title="引数">引数</a>が <code>0</code>であれば、これは <code>1</code> を返す。その他の場合は3行目が試される。これは再帰的な呼び出しで、nが0に達するまで繰り返し関数が実行される。 </p><p>ガードは階乗が定義されない<a href="/wiki/%E6%AD%A3%E3%81%AE%E6%95%B0%E3%81%A8%E8%B2%A0%E3%81%AE%E6%95%B0" title="正の数と負の数">負</a>の値から3行目を保護している。このガードが無ければこの関数は0の終端条件に達することなく、再帰してすべての負の値を経由してしまう。実際、このパターンマッチングは完全ではない。もし関数facに負の整数が引数として渡されると、このプログラムは実行時<a href="/wiki/%E3%82%A8%E3%83%A9%E3%83%BC" title="エラー">エラー</a>とともに落ちるであろう。<code>fac _ = error "negative value"</code>のように定義を追加すれば適切な<a href="/wiki/%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8" title="エラーメッセージ">エラーメッセージ</a>を出力することができる。 </p> <div class="mw-heading mw-heading3"><h3 id="より複合的な例"><span id=".E3.82.88.E3.82.8A.E8.A4.87.E5.90.88.E7.9A.84.E3.81.AA.E4.BE.8B"></span>より複合的な例</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=21" title="節を編集: より複合的な例"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>引数 <code>f</code> を伴う<a href="/wiki/%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0" title="高階関数">高階関数</a>で表現された単純な<a href="/wiki/%E9%80%86%E3%83%9D%E3%83%BC%E3%83%A9%E3%83%B3%E3%83%89%E8%A8%98%E6%B3%95" title="逆ポーランド記法">逆ポーランド記法</a>評価器が、<a href="/wiki/%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%83%9E%E3%83%83%E3%83%81%E3%83%B3%E3%82%B0" title="パターンマッチング">パターンマッチング</a>と型クラス <code>Read</code> を用いた <code>where</code> 節で定義されている。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">calc</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">String</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="p">[</span><span class="kt">Float</span><span class="p">]</span> <span class="w"> </span><span class="n">calc</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">foldl</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="kt">[]</span><span class="w"> </span><span class="o">.</span><span class="w"> </span><span class="n">words</span> <span class="w"> </span><span class="kr">where</span><span class="w"> </span> <span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="kt">:</span><span class="n">y</span><span class="kt">:</span><span class="n">zs</span><span class="p">)</span><span class="w"> </span><span class="s">"+"</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">y</span><span class="o">+</span><span class="n">x</span><span class="kt">:</span><span class="n">zs</span> <span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="kt">:</span><span class="n">y</span><span class="kt">:</span><span class="n">zs</span><span class="p">)</span><span class="w"> </span><span class="s">"-"</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">y</span><span class="o">-</span><span class="n">x</span><span class="kt">:</span><span class="n">zs</span> <span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="kt">:</span><span class="n">y</span><span class="kt">:</span><span class="n">zs</span><span class="p">)</span><span class="w"> </span><span class="s">"*"</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">y</span><span class="o">*</span><span class="n">x</span><span class="kt">:</span><span class="n">zs</span> <span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="kt">:</span><span class="n">y</span><span class="kt">:</span><span class="n">zs</span><span class="p">)</span><span class="w"> </span><span class="s">"/"</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">y</span><span class="o">/</span><span class="n">x</span><span class="kt">:</span><span class="n">zs</span> <span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="n">xs</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">read</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="n">xs</span> </pre></div> <p>空リストを初期状態とし、<code>f</code> を使って一語ずつ文字列を解釈していく。<code>f</code> は、注目している語が演算子ならばその演算を実行し、それ以外ならば浮動小数点として計算スタックに積んでいる。 </p><p>次は<a href="/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0%E5%88%97" class="mw-redirect" title="フィボナッチ数列">フィボナッチ数列</a>のリストである。ある値nに対するfib(n)は一回しか計算しないようになっており、その点ではナイーブなフィボナッチと異なる効率の良いコードとなっている。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">fibs</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="n">zipWith</span><span class="w"> </span><span class="p">(</span><span class="o">+</span><span class="p">)</span><span class="w"> </span><span class="n">fibs</span><span class="w"> </span><span class="p">(</span><span class="n">tail</span><span class="w"> </span><span class="n">fibs</span><span class="p">)</span> </pre></div> <p><a href="/wiki/%E7%84%A1%E9%99%90" title="無限">無限</a>リストは 余再帰<sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup>(リストの後ろの値は要求があったときに <code>0</code> と <code>1</code> の二つの初期要素から開始され算出される)によって実現される。このような定義は遅延評価の実例で、<span lang="en">Haskell</span> プログラミングでも重要な部分である。 </p><p>ただし、フィボナッチ数列の生成の場合は、ある要素の値が必要であれば、その要素より前にある要素の値は全て必要である。従って、遅延させた上で結局は後から全てその値を求めることになり、むしろ無駄であるので、この場合は遅延させない組込関数seqを使用したほうが効率は良くなり<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup>、fib 1000000 といったような値を計算するような場合には差が見えてくる。あるいはリストの先に出る値から順番に計算させるとそのほうが速い、といったことが起きる。(さらに、フィボナッチ数はnに対して2<sup>n</sup>と大きな値になるので、そのようなBigIntegerの加算のコストも掛かり、以前にこの場所に書かれていたような「線形時間でのフィボナッチ数列の生成」は、大きい値では不可能である) </p><p>どのように評価が進行するかの例示のために、次は6つの要素の計算の後の <code>fibs</code> と <code>tail fibs</code> の値と、どのように<code>zipWith (+)</code> が4つの要素を生成し、次の値を生成し続けるかを図示したものである。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">fibs</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="o">...</span> <span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="o">+</span> <span class="w"> </span><span class="n">tail</span><span class="w"> </span><span class="n">fibs</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="o">...</span> <span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="ow">=</span> <span class="w"> </span><span class="n">zipWith</span><span class="w"> </span><span class="o">...</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">8</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="o">...</span> <span class="w"> </span><span class="n">fibs</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">8</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="o">...</span> </pre></div> <p>次はGHCで使える言語拡張で、リスト内包表記を並列的な生成を記述できるよう拡張するParallelListCompを用いて書いた同様の式である。(GHCの拡張は特別な<a href="/wiki/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3" class="mw-redirect" title="コマンドライン">コマンドライン</a><a href="/wiki/%E3%83%95%E3%83%A9%E3%82%B0_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)" title="フラグ (コンピュータ)">フラグ</a>、またはLANGUAGEプラグマによって有効にしなければならない。詳しくはGHCのマニュアルを参照のこと) </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="cm">{-# LANGUAGE ParallelListComp #-}</span> <span class="w"> </span><span class="n">fibs</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="n">a</span><span class="o">+</span><span class="n">b</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow"><-</span><span class="w"> </span><span class="n">fibs</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="ow"><-</span><span class="w"> </span><span class="n">tail</span><span class="w"> </span><span class="n">fibs</span><span class="w"> </span><span class="p">]</span> </pre></div> <p>先に見た階乗の定義は、次のように関数の列を内包表記で生成して書く事もできる。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">fac</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">foldl</span><span class="w"> </span><span class="p">(</span><span class="o">.</span><span class="p">)</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="p">[(</span><span class="o">*</span><span class="n">k</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="ow"><-</span><span class="w"> </span><span class="p">[</span><span class="mi">1</span><span class="o">..</span><span class="n">n</span><span class="p">]]</span><span class="w"> </span><span class="mi">1</span> </pre></div> <p>特に簡潔に書ける例として、ハミング数が順番に並ぶリストを返す以下のような関数がある。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">hamming</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="n">map</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="n">hamming</span><span class="w"> </span><span class="o">#</span><span class="w"> </span><span class="n">map</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="mi">3</span><span class="p">)</span><span class="w"> </span><span class="n">hamming</span><span class="w"> </span><span class="o">#</span><span class="w"> </span><span class="n">map</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="mi">5</span><span class="p">)</span><span class="w"> </span><span class="n">hamming</span> <span class="w"> </span><span class="kr">where</span><span class="w"> </span><span class="n">xxs</span><span class="o">@</span><span class="p">(</span><span class="n">x</span><span class="kt">:</span><span class="n">xs</span><span class="p">)</span><span class="w"> </span><span class="o">#</span><span class="w"> </span><span class="n">yys</span><span class="o">@</span><span class="p">(</span><span class="n">y</span><span class="kt">:</span><span class="n">ys</span><span class="p">)</span> <span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">x</span><span class="o">==</span><span class="n">y</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="n">xs</span><span class="w"> </span><span class="o">#</span><span class="w"> </span><span class="n">ys</span> <span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">x</span><span class="o"><</span><span class="n">y</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="n">xs</span><span class="w"> </span><span class="o">#</span><span class="w"> </span><span class="n">yys</span> <span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">x</span><span class="o">></span><span class="n">y</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="n">xxs</span><span class="w"> </span><span class="o">#</span><span class="w"> </span><span class="n">ys</span> </pre></div> <p>上に示されたさまざまな <code>fibs</code> の定義のように、これはオンデマンドに数のリストを実現するために無限リストを使っており、<code>1</code> という先頭要素から後続の要素を生成している。 </p><p>ここでは、後続要素の構築関数は <code>where</code> 節内の記号 <code>#</code> で表現された中置演算子で定義されている。 </p><p>各|は、<a href="/wiki/%E7%AD%89%E5%8F%B7" title="等号">等号</a>の前半の条件部分と、後半の定義部分からなるガード節を構成する。 </p> <div class="mw-heading mw-heading2"><h2 id="ライブラリ"><span id=".E3.83.A9.E3.82.A4.E3.83.96.E3.83.A9.E3.83.AA"></span>ライブラリ</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=22" title="節を編集: ライブラリ"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="parsec">parsec</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=23" title="節を編集: parsec"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>parsec は <span lang="en">Haskell</span> で書かれたパーサコンビネータである。<a href="/wiki/%E6%A7%8B%E6%96%87%E8%A7%A3%E6%9E%90%E5%99%A8" title="構文解析器">パーサ</a>の一種であるが<a href="/wiki/%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9" class="mw-disambig" title="コンパイラコンパイラ">コンパイラコンパイラ</a>とは異なり、<code>Parsec</code> はパーサのソースコードを出力するのではなく、純粋に <span lang="en">Haskell</span> の関数としてパーサを構成する。<span lang="en"><a href="/wiki/Yacc" title="Yacc">yacc</a></span> のようにプログラミング言語と異なる言語を新たに習得する必要がなく、高速でかつ堅牢で、型安全で、演算子の結合性や優先順位を考慮したパーサを自動的に構成したり、動的にパーサを変更することすらできる。 </p><p>派生として、大幅に高速なパースが可能な<b>attoparsec</b><sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup>、高機能でより洗練された<b>trifecta</b><sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup>がある。 </p> <div class="mw-heading mw-heading3"><h3 id="Template_Haskell"><span lang="en">Template Haskell</span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=24" title="節を編集: Template Haskell"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><span lang="en">Template Haskell</span> は <span lang="en">Haskell</span> の<a href="/wiki/%E3%83%A1%E3%82%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" title="メタプログラミング">メタプログラミング</a>を可能にする拡張である。<span lang="en">Haskell</span> ソースコードの構文木を直接 <span lang="en">Haskell</span> から操作することができ、C、<span lang="en">C++</span> のマクロやテンプレートを上回る極めて柔軟なプログラミングを行うことができる。 </p> <div class="mw-heading mw-heading3"><h3 id="QuickCheck">QuickCheck</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=25" title="節を編集: QuickCheck"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><code><a href="/wiki/QuickCheck" title="QuickCheck">QuickCheck</a></code> はデータ駆動型のテストを行うモジュールである。自動的にテストデータを作成してプログラムの正当性をテストすることができる。 </p> <div class="mw-heading mw-heading3"><h3 id="lens">lens</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=26" title="節を編集: lens"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>lensはアクセサの概念を一般化するライブラリであり、様々なデータ構造に対して共通のインタフェースを与える。Getter、Setterは一つの関数として表現されており、それらを合成することもできる。<a href="/wiki/JavaScript_Object_Notation" title="JavaScript Object Notation">JSON</a>や<a href="/wiki/Extensible_Markup_Language" title="Extensible Markup Language">XML</a>や、JSONやXML以外の処理にも応用できる。 </p> <div class="mw-heading mw-heading2"><h2 id="批判"><span id=".E6.89.B9.E5.88.A4"></span>批判</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=27" title="節を編集: 批判"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><span lang="en">Haskell</span> は他の<a href="/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E" title="プログラミング言語">プログラミング言語</a>には見られない多くの先進的機能を持っているが、これらの機能のいくつかは言語を複雑にしすぎており、理解が困難であると批判されてきた。とりわけ、関数型プログラミング言語と主流でないプログラミング言語に対する批判は <span lang="en">Haskell</span> にもあてはまる。加えて、<span lang="en">Haskell</span> の潔癖さとその理論中心の起源に起因する不満がある。 </p><p><a href="/wiki/2002%E5%B9%B4" title="2002年">2002年</a>に Jan-Willem Maessen、<a href="/wiki/2003%E5%B9%B4" title="2003年">2003年</a>に<a href="/wiki/%E3%82%B5%E3%82%A4%E3%83%A2%E3%83%B3%E3%83%BB%E3%83%9A%E3%82%A4%E3%83%88%E3%83%B3%E3%83%BB%E3%82%B8%E3%83%A7%E3%83%BC%E3%83%B3%E3%82%BA" title="サイモン・ペイトン・ジョーンズ">サイモン・ペイトン・ジョーンズ</a>が遅延評価に関連するこの問題を議論し、その上でこの理論的動機を認識した。彼らは実行時のオーバーヘッドの悪化に加え、遅延はコードのパフォーマンスの推察をより困難にすると言及した。 </p><p>2003年に Bastiaan Heeren と Daan Leijen、Arjan van IJzendoorn は <span lang="en">Haskell</span> の学習者にとってのつまづきに気がついた。これを解決するために、彼らは <span lang="en">Helium</span> と呼ばれる新たなインタプリタを開発し、この中でいくつかの型クラスのサポートを取り除き、<span lang="en">Haskell</span> の機能の一般化を制限することによってエラーメッセージのユーザ親和性を改善した。 </p> <div class="mw-heading mw-heading2"><h2 id="実装"><span id=".E5.AE.9F.E8.A3.85"></span>実装</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=28" title="節を編集: 実装"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>以下は <span lang="en">Haskell</span> 98 仕様を完全に満たす、または仕様に非常に近く、<a href="/wiki/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9" title="オープンソース">オープンソース</a>ライセンスの下で配布されているものである。ここには現在のところ商用のHaskell実装は含まれない。 </p> <dl><dt><span lang="en">Glasgow Haskell Compiler</span></dt> <dd><a href="/wiki/Glasgow_Haskell_Compiler" title="Glasgow Haskell Compiler">The Glasgow Haskell Compiler</a> は異なる複数の<a href="/wiki/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BB%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3" title="コンピュータ・アーキテクチャ">アーキテクチャ</a>のネイティブコードにコンパイルできるほか、C言語にコンパイルすることもできる。おそらくGHCは最も知られた <span lang="en">Haskell</span> コンパイラで、現在のところGHCのみで動く言語拡張が実装されており、かなり便利ないくつかのライブラリはGHCのみで動作する(たとえは <span lang="en"><a href="/wiki/OpenGL" title="OpenGL">OpenGL</a></span> の<a href="/wiki/%E8%A8%80%E8%AA%9E%E3%83%90%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0" class="mw-redirect" title="言語バインディング">バインディング</a>など)。<sup id="cite_ref-35" class="reference"><a href="#cite_note-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup></dd> <dt><span lang="en">Gofer</span></dt> <dd>初期(Haskell 1.2)の仕様をベースとした、等式推論に向いた<sup id="cite_ref-36" class="reference"><a href="#cite_note-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup>方言およびインタプリタの実装。当時の <span lang="en">Haskell</span> より <span lang="en">Miranda</span> に似た構文、標準の機能をいくつか満たさない、逆に標準にないいくつかの機能の追加、などの特徴があった。マーク・ジョーンズにより開発された。その役割の多くは <span lang="en">Hugs</span> に譲られた。<span lang="en">Hugs</span> の「<span lang="en">g</span>」は <span lang="en">Gofer</span> に由来する。</dd> <dt>HBC</dt> <dd>これは別のネイティブコード <span lang="en">Haskell</span> コンパイラ。<style data-mw-deduplicate="TemplateStyles:r86009555">@media screen{.mw-parser-output .fix-domain{border-bottom:dashed 1px}}</style><span class="fix-domain" title="この記述には信頼できる情報源の提示が求められています。(2020年2月)">これはしばらくの間開発が活発ではなくなっているが、未だに利用可能である。</span><sup class="noprint Template-Fact">[<i><a href="/wiki/Wikipedia:%E3%80%8C%E8%A6%81%E5%87%BA%E5%85%B8%E3%80%8D%E3%82%92%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%95%E3%82%8C%E3%81%9F%E6%96%B9%E3%81%B8" title="Wikipedia:「要出典」をクリックされた方へ"><span title="この記述には信頼できる情報源の提示が求められています。(2020年2月)">要出典</span></a></i>]</sup><sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup></dd> <dt><span lang="en">Helium</span></dt> <dd>これは新しい <span lang="en">Haskell</span> の方言である。開発の際の焦点は、明瞭なエラーメッセージを提供し学習を容易にすることである。Heliumは型クラスをサポートせず、多くのHaskellプログラムとは互換性のない実装である。<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup></dd> <dt><span lang="en">Hugs</span></dt> <dd>これはバイトコードインタプリタである。これは速いプログラム編集とそれなりの実行スピードを提供する。これは単純なグラフィックスライブラリを含む。多くの人が <span lang="en">Haskell</span> の基本を学ぶのによいが、これはオモチャ的な実装であるということではない。これは最も可搬で軽量な <span lang="en">Haskell</span> 実装である。<sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup></dd> <dt>jhc</dt> <dd>これは新しいプログラム変換の研究用としてのみならず、スピードと生成されるプログラムの効率を重視した John Meacham によって書かれた <span lang="en">Haskell</span> コンパイラである。<sup id="cite_ref-40" class="reference"><a href="#cite_note-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup></dd> <dt>nhc98</dt> <dd>これは別のバイトコードコンパイラであるが、そのバイトコードは <span lang="en">Hugs</span> より顕著に速く走る。Nhc98は省メモリ使用に焦点を絞っており、古いマシンや遅いマシンにはとりわけよい選択肢となる。<sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup></dd> <dt>yhc</dt> <dd>これはnhc98の派生物で、単純かつ可搬で効率的、<span lang="en">integrating Hat</span> のサポートを目標とする。<sup id="cite_ref-42" class="reference"><a href="#cite_note-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup></dd></dl> <div class="mw-heading mw-heading2"><h2 id="代表的なアプリケーション"><span id=".E4.BB.A3.E8.A1.A8.E7.9A.84.E3.81.AA.E3.82.A2.E3.83.97.E3.83.AA.E3.82.B1.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3"></span>代表的なアプリケーション</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=29" title="節を編集: 代表的なアプリケーション"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><span title="リンク先の項目はまだありません。新規の執筆や他言語版からの翻訳が望まれます。"><a href="/w/index.php?title=Darcs&action=edit&redlink=1" class="new" title="Darcs (存在しないページ)">Darcs</a><span style="font-size: 0.77em; font-weight: normal;" class="noprint">(<a href="https://en.wikipedia.org/wiki/Darcs" class="extiw" title="en:Darcs">英語版</a>)</span></span> - 分散<a href="/wiki/%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0" title="バージョン管理システム">バージョン管理システム</a>。</li> <li>Monadius - <a href="/wiki/%E3%82%B0%E3%83%A9%E3%83%87%E3%82%A3%E3%82%A6%E3%82%B9_(%E3%82%B2%E3%83%BC%E3%83%A0)" title="グラディウス (ゲーム)">グラディウス</a>・クローンのシューティングゲーム。</li> <li><a href="/wiki/Pandoc" title="Pandoc">Pandoc</a> - <a href="/wiki/Markdown" title="Markdown">Markdown</a>などを変換するドキュメント・コンバータ。</li> <li><a href="/wiki/Xmonad" title="Xmonad">xmonad</a> - <a href="/wiki/X_Window_System" title="X Window System">X Window System</a>の<a href="/wiki/%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3" title="ウィンドウマネージャ">ウィンドウマネージャ</a>。</li> <li><span title="リンク先の項目はまだありません。新規の執筆や他言語版からの翻訳が望まれます。"><a href="/w/index.php?title=Yesod&action=edit&redlink=1" class="new" title="Yesod (存在しないページ)">Yesod</a><span style="font-size: 0.77em; font-weight: normal;" class="noprint">(<a href="https://en.wikipedia.org/wiki/Yesod_(web_framework)" class="extiw" title="en:Yesod (web framework)">英語版</a>)</span></span> - <a href="/wiki/Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF" title="Webアプリケーションフレームワーク">Webアプリケーションフレームワーク</a>。</li></ul> <div class="mw-heading mw-heading2"><h2 id="脚注"><span id=".E8.84.9A.E6.B3.A8"></span>脚注</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=30" title="節を編集: 脚注"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="noprint" style="float:right; font-size:90%;">[<a href="/wiki/Help:%E8%84%9A%E6%B3%A8/%E8%AA%AD%E8%80%85%E5%90%91%E3%81%91" title="Help:脚注/読者向け"><span title="この欄の操作法">脚注の使い方</span></a>]</div> <div class="reflist" style="list-style-type: decimal;"> <ol class="references"> <li id="cite_note-1"><b><a href="#cite_ref-1">^</a></b> <span class="reference-text">出典URL: <a rel="nofollow" class="external free" href="https://mail.haskell.org/pipermail/haskell/2009-November/021750.html">https://mail.haskell.org/pipermail/haskell/2009-November/021750.html</a>, 閲覧日: 2023年1月11日, 題名: <span lang="en">[Haskell] Announcing Haskell 2010</span>, 出版日: 2009年11月24日</span> </li> <li id="cite_note-2"><b><a href="#cite_ref-2">^</a></b> <span class="reference-text">かつては <span lang="en">Goffin</span> と呼ばれていた。</span> </li> <li id="cite_note-Pref_98-3">^ <a href="#cite_ref-Pref_98_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Pref_98_3-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Pref_98_3-2"><sup><i><b>c</b></i></sup></a> <span class="reference-text"><cite class="citation web" style="font-style:normal">“<a rel="nofollow" class="external text" href="http://haskell.org/onlinereport/preface-jfp.html">Preface</a>”. <i>Haskell 98 Language and Libraries: The Revised Report</i> (2002年12月). <span title="">2009年6月23日</span>閲覧。</cite></span> </li> <li id="cite_note-4"><b><a href="#cite_ref-4">^</a></b> <span class="reference-text"><cite class="citation web" style="font-style:normal">“<a rel="nofollow" class="external text" href="http://www.haskell.org/haskell-history.html">The History of Haskell</a>”. <span title="">2009年6月23日</span>閲覧。</cite></span> </li> <li id="cite_note-Revised_report-5"><b><a href="#cite_ref-Revised_report_5-0">^</a></b> <span class="reference-text"><cite class="citation web" style="font-style:normal"><a href="/w/index.php?title=Simon_Peyton_Jones&action=edit&redlink=1" class="new" title="Simon Peyton Jones (存在しないページ)">Simon Peyton Jones (編)</a> (2002年12月). “<a rel="nofollow" class="external text" href="http://haskell.org/onlinereport/">Haskell 98 Language and Libraries: The Revised Report</a>”. <span title="">2009年6月23日</span>閲覧。</cite></span> </li> <li id="cite_note-6"><b><a href="#cite_ref-6">^</a></b> <span class="reference-text"><cite class="citation web" style="font-style:normal">“<a rel="nofollow" class="external text" href="http://haskell.org/haskellwiki/Future">Future development of Haskell</a>”. <span title="">2009年6月23日</span>閲覧。</cite></span> </li> <li id="cite_note-7"><b><a href="#cite_ref-7">^</a></b> <span class="reference-text"><cite class="citation web" style="font-style:normal">“<a rel="nofollow" class="external text" href="http://hackage.haskell.org/trac/haskell-prime">Welcome to Haskell'</a>”. <i>The Haskell' Wiki</i>. <span title="">2009年6月23日</span>閲覧。</cite></span> </li> <li id="cite_note-8"><b><a href="#cite_ref-8">^</a></b> <span class="reference-text"><a href="/wiki/%E8%8B%B1%E8%AA%9E" title="英語">英</a>: <span lang="en">language-pragma-syntax-extension</span></span> </li> <li id="cite_note-9"><b><a href="#cite_ref-9">^</a></b> <span class="reference-text">「変数」は実際にはその値を動的に変更することはできないなど、C言語など手続き型言語の変数とは明らかに異なるものである。</span> </li> <li id="cite_note-10"><b><a href="#cite_ref-10">^</a></b> <span class="reference-text">ここでは説明のため単に Float としているが、標準ライブラリで定義されている円周率 <code>pi</code> は浮動小数点数型の抽象的な型クラスである <code>Floating a</code> で定義されており、<code>Float</code> のみならず 倍精度浮動小数点数型 <code>Double</code> の値としても取得できる。</span> </li> <li id="cite_note-11"><b><a href="#cite_ref-11">^</a></b> <span class="reference-text"><span lang="en">Haskell</span> はカリー化によりすべての関数を 1 引数の関数として表現できるが、これにしたがって <code>-></code> は右結合であるとして読むこともできる。上記の関数の型の定義は、括弧を明示した次の定義と同等である。 <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">gcd</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="kt">Int</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="p">(</span><span class="kt">Int</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="kt">Int</span><span class="p">)</span> </pre></div> <p>関数を引数にとる関数は、引数の型を括弧で囲んで -> 記号の優先順位を指定すればよい。次は関数を二つとり、その合成関数を返す演算子 . の定義である。 </p> <div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="o">.</span><span class="p">)</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="p">(</span><span class="n">b</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="n">c</span><span class="p">)</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="n">c</span> </pre></div></span> </li> <li id="cite_note-12"><b><a href="#cite_ref-12">^</a></b> <span class="reference-text">式の外で演算子の型を指定するときは、演算子を括弧で囲めばよい。以下の関数と演算子の相互変換を参照のこと。</span> </li> <li id="cite_note-13"><b><a href="#cite_ref-13">^</a></b> <span class="reference-text"> これは、<span lang="en">C++</span> や <span lang="en">Java</span> のような言語では次のようなコードに相当する。 <div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="n">Hashtable</span><span class="o"><</span><span class="n">String</span><span class="p">,</span><span class="n">Int</span><span class="o">></span><span class="w"> </span><span class="n">hashtable</span><span class="p">;</span> </pre></div></span> </li> <li id="cite_note-14"><b><a href="#cite_ref-14">^</a></b> <span class="reference-text">当然ながら、リストの要素としてリストを持つこともできる。例えば、文字リスト(文字列)のリストの型は <code>[[Char]]</code> となるであろう。</span> </li> <li id="cite_note-15"><b><a href="#cite_ref-15">^</a></b> <span class="reference-text">ユニットはC言語や <span lang="en">Java</span> などでいう <code>void</code> のような使われ方をする。</span> </li> <li id="cite_note-16"><b><a href="#cite_ref-16">^</a></b> <span class="reference-text">言い換えれば、単純な型名に見えても何か複雑な別の型の別名である可能性がある。</span> </li> <li id="cite_note-17"><b><a href="#cite_ref-17">^</a></b> <span class="reference-text">実際に標準ライブラリでは <code>String</code> は <code>[Char]</code> の別名であり、<code>String</code> にはあらゆるリストの操作が可能である。</span> </li> <li id="cite_note-18"><b><a href="#cite_ref-18">^</a></b> <span class="reference-text">type values are built from type constructors. <a rel="nofollow" class="external text" href="https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-680004.2">haskell2010</a></span> </li> <li id="cite_note-19"><b><a href="#cite_ref-19">^</a></b> <span class="reference-text">Char, Int, Integer, Float, Double and Bool are type constants with kind ∗. <a rel="nofollow" class="external text" href="https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-680004.2">haskell2010</a></span> </li> <li id="cite_note-20"><b><a href="#cite_ref-20">^</a></b> <span class="reference-text">Maybe and IO are unary type constructors, and treated as types with kind ∗→∗. <a rel="nofollow" class="external text" href="https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-680004.2">haskell2010</a></span> </li> <li id="cite_note-21"><b><a href="#cite_ref-21">^</a></b> <span class="reference-text">除算する演算子 <code>/</code> は存在するが、これは <code>Float</code> などを除算する演算子であり整数ではない。他の言語のように自動的に値を変換する(int → float など)ような動作は <span lang="en">Haskell</span> では意図的に排除されている。</span> </li> <li id="cite_note-22"><b><a href="#cite_ref-22">^</a></b> <span class="reference-text"><span lang="en">Haskell</span> の型システムにおける汎用型が実体化されたもの。オブジェクト指向におけるインスタンスとは異なる。</span> </li> <li id="cite_note-23"><b><a href="#cite_ref-23">^</a></b> <span class="reference-text">ただし、型を明示することは可読性を向上したり問題の発見に役立つため、常に省略するのがよいとは限らない。</span> </li> <li id="cite_note-24"><b><a href="#cite_ref-24">^</a></b> <span class="reference-text"><code>java.lang.Integer.parseInt</code>、<code>java.lang.Double.parseDouble</code> など</span> </li> <li id="cite_note-25"><b><a href="#cite_ref-25">^</a></b> <span class="reference-text"><a href="/wiki/%E8%8B%B1%E8%AA%9E" title="英語">英</a>: <span lang="en">algebraic data type</span></span> </li> <li id="cite_note-26"><b><a href="#cite_ref-26">^</a></b> <span class="reference-text">データ型名とデータコンストラクタ名は同じでも構わない。このような単純な代数的データ型であれば型名とデータコンストラクタ名を同じにすることも多い。</span> </li> <li id="cite_note-27"><b><a href="#cite_ref-27">^</a></b> <span class="reference-text"><a href="/wiki/%E8%8B%B1%E8%AA%9E" title="英語">英</a>: <span lang="en">section</span></span> </li> <li id="cite_note-28"><b><a href="#cite_ref-28">^</a></b> <span class="reference-text"><a href="/wiki/%E8%8B%B1%E8%AA%9E" title="英語">英</a>: <span lang="en">type class</span></span> </li> <li id="cite_note-29"><b><a href="#cite_ref-29">^</a></b> <span class="reference-text"><a href="/wiki/%E8%8B%B1%E8%AA%9E" title="英語">英</a>: <span lang="en">action</span></span> </li> <li id="cite_note-30"><b><a href="#cite_ref-30">^</a></b> <span class="reference-text">GHC には <code>System.IO.Unsafe</code> モジュールに <code>unsafePerformIO</code> という関数があり、副作用を持ちながらアクションでない型を返すことができる。これは参照透過性に対する<a href="/wiki/%E3%83%90%E3%83%83%E3%82%AF%E3%83%89%E3%82%A2" title="バックドア">バックドア</a>であり、<span lang="en">Haskell</span> の参照透過性を破壊する恐れがあるので、注意深く使わなければならない。</span> </li> <li id="cite_note-31"><b><a href="#cite_ref-31">^</a></b> <span class="reference-text"><a href="/wiki/%E8%8B%B1%E8%AA%9E" title="英語">英</a>: <span lang="en">corecursion</span></span> </li> <li id="cite_note-32"><b><a href="#cite_ref-32">^</a></b> <span class="reference-text"><a rel="nofollow" class="external text" href="http://d.hatena.ne.jp/kazu-yamamoto/20100624/1277348961">Haskellの神話 - あどけない話</a></span> </li> <li id="cite_note-33"><b><a href="#cite_ref-33">^</a></b> <span class="reference-text"><a rel="nofollow" class="external text" href="http://hackage.haskell.org/package/attoparsec">attoparsec: Fast combinator parsing for bytestrings and text</a></span> </li> <li id="cite_note-34"><b><a href="#cite_ref-34">^</a></b> <span class="reference-text"><a rel="nofollow" class="external text" href="http://hackage.haskell.org/package/trifecta">trifecta: A modern parser combinator library with convenient diagnostics</a></span> </li> <li id="cite_note-35"><b><a href="#cite_ref-35">^</a></b> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.haskell.org/ghc/">Home — The Glasgow Haskell Compiler</a></span> </li> <li id="cite_note-36"><b><a href="#cite_ref-36">^</a></b> <span class="reference-text"><a href="/wiki/%E8%8B%B1%E8%AA%9E" title="英語">英</a>: <span lang="en">good for equational reasoning</span></span> </li> <li id="cite_note-37"><b><a href="#cite_ref-37">^</a></b> <span class="reference-text"><a rel="nofollow" class="external free" href="http://www.cs.chalmers.se/~augustss/hbc/hbc.html">http://www.cs.chalmers.se/~augustss/hbc/hbc.html</a> (リンク切れ)</span> </li> <li id="cite_note-38"><b><a href="#cite_ref-38">^</a></b> <span class="reference-text"><a rel="nofollow" class="external free" href="http://foswiki.cs.uu.nl/foswiki/Helium">http://foswiki.cs.uu.nl/foswiki/Helium</a></span> </li> <li id="cite_note-39"><b><a href="#cite_ref-39">^</a></b> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.haskell.org/hugs/">Hugs 98</a></span> </li> <li id="cite_note-40"><b><a href="#cite_ref-40">^</a></b> <span class="reference-text"><a rel="nofollow" class="external text" href="http://repetae.net/john/computer/jhc/">jhc</a></span> </li> <li id="cite_note-41"><b><a href="#cite_ref-41">^</a></b> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.cs.york.ac.uk/fp/nhc98/">nhc98</a></span> </li> <li id="cite_note-42"><b><a href="#cite_ref-42">^</a></b> <span class="reference-text"><a rel="nofollow" class="external text" href="https://wiki.haskell.org/Yhc">Yhc - HaskellWiki</a></span> </li> </ol></div> <div class="mw-heading mw-heading2"><h2 id="参考文献"><span id=".E5.8F.82.E8.80.83.E6.96.87.E7.8C.AE"></span>参考文献</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=31" title="節を編集: 参考文献"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li>Simon Peyton Jones. <a rel="nofollow" class="external text" href="http://research.microsoft.com/~simonpj/papers/haskell-retrospective"><i>Wearing the hair shirt: a retrospective on Haskell</i></a> 2003年の<a href="https://en.wikipedia.org/wiki/POPL" class="extiw" title="en:POPL">en:POPL</a>での招待演説。</li> <li>Jan-Willem Maessen. <i>Eager Haskell: Resource-bounded execution yields efficient iteration</i>. 2002年の<a href="/wiki/Association_for_Computing_Machinery" title="Association for Computing Machinery">ACM</a> SIGPLAN workshopでのHaskellの記録。</li> <li>Bastiaan Heeren, Daan Leijen, Arjan van IJzendoorn. <a rel="nofollow" class="external text" href="http://www.cs.uu.nl/~bastiaan/heeren-helium.pdf"><i>Helium, for learning Haskell</i></a>. 2003年の ACM SIGPLAN workshop でのHaskellの記録。</li></ul> <div class="mw-heading mw-heading2"><h2 id="学習用参考図書"><span id=".E5.AD.A6.E7.BF.92.E7.94.A8.E5.8F.82.E8.80.83.E5.9B.B3.E6.9B.B8"></span>学習用参考図書</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=32" title="節を編集: 学習用参考図書"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li>向井淳:「入門Haskell―はじめて学ぶ関数型言語」、毎日コミュニケーションズ、 <a href="/wiki/%E7%89%B9%E5%88%A5:%E6%96%87%E7%8C%AE%E8%B3%87%E6%96%99/9784839919627" class="internal mw-magiclink-isbn">ISBN 978-4839919627</a>(2006年3月1日)。</li> <li>青木 峰郎, 山下 伸夫 (監修):「ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門」、 ソフトバンククリエイティブ、<a href="/wiki/%E7%89%B9%E5%88%A5:%E6%96%87%E7%8C%AE%E8%B3%87%E6%96%99/9784797336023" class="internal mw-magiclink-isbn">ISBN 978-4797336023</a>(2006年6月1日)。</li> <li>Bryan O'Sullivan, John Goerzen, Don Stewart:「Real World Haskell―実戦で学ぶ関数型言語プログラミング」、オライリージャパン、<a href="/wiki/%E7%89%B9%E5%88%A5:%E6%96%87%E7%8C%AE%E8%B3%87%E6%96%99/9784873114231" class="internal mw-magiclink-isbn">ISBN 978-4873114231</a> (2009年10月26日)。</li> <li>Grahum Hutton、山本和彦 (訳):「プログラミングHaskell」、オーム社、<a href="/wiki/%E7%89%B9%E5%88%A5:%E6%96%87%E7%8C%AE%E8%B3%87%E6%96%99/9784274067815" class="internal mw-magiclink-isbn">ISBN 978-4274067815</a>(2009年11月11日)※第2版が2019年に出版。</li> <li>Miran Lipovača、田中英行 (訳), 村主崇行 (訳):「すごいHaskellたのしく学ぼう!」、オーム社、<a href="/wiki/%E7%89%B9%E5%88%A5:%E6%96%87%E7%8C%AE%E8%B3%87%E6%96%99/9784274068850" class="internal mw-magiclink-isbn">ISBN 978-4274068850</a>(2012年5月23日)。</li> <li>Richard Bird、山下伸夫(訳):「関数プログラミング入門 ―Haskellで学ぶ原理と技法―」、オーム社、<a href="/wiki/%E7%89%B9%E5%88%A5:%E6%96%87%E7%8C%AE%E8%B3%87%E6%96%99/9784274068966" class="internal mw-magiclink-isbn">ISBN 978-4274068966</a> (2012年10月26日)。</li> <li>Richard Bird、山下伸夫 (訳):「Haskellによる関数プログラミングの思考法」、KADOKAWA、 <a href="/wiki/%E7%89%B9%E5%88%A5:%E6%96%87%E7%8C%AE%E8%B3%87%E6%96%99/9784048930536" class="internal mw-magiclink-isbn">ISBN 978-4048930536</a>(2017年2月27日)。</li> <li>重城良国:「Haskell 教養としての関数型プログラミング」、秀和システム、<a href="/wiki/%E7%89%B9%E5%88%A5:%E6%96%87%E7%8C%AE%E8%B3%87%E6%96%99/9784798048062" class="internal mw-magiclink-isbn">ISBN 978-4798048062</a>(2017年4月15日)。</li> <li>Will Kurt、株式会社クイープ (監訳):「入門Haskellプログラミング」、翔泳社、<a href="/wiki/%E7%89%B9%E5%88%A5:%E6%96%87%E7%8C%AE%E8%B3%87%E6%96%99/9784798158662" class="internal mw-magiclink-isbn">ISBN 978-4798158662</a>(2019年7月31日)。</li> <li>Grahum Hutton、山本和彦 (訳):「プログラミングHaskell 第2版」、ラムダノート、<a href="/wiki/%E7%89%B9%E5%88%A5:%E6%96%87%E7%8C%AE%E8%B3%87%E6%96%99/9784908686078" class="internal mw-magiclink-isbn">ISBN 978-4908686078</a>(2019年8月2日)。</li> <li>本間雅洋、類地孝介、逢坂時響:「Haskell入門 関数型プログラミング言語の基礎と実践」、技術評論社、<a href="/wiki/%E7%89%B9%E5%88%A5:%E6%96%87%E7%8C%AE%E8%B3%87%E6%96%99/9784774192376" class="internal mw-magiclink-isbn">ISBN 978-4774192376</a>(2017年9月27日)。</li></ul> <div class="mw-heading mw-heading2"><h2 id="関連項目"><span id=".E9.96.A2.E9.80.A3.E9.A0.85.E7.9B.AE"></span>関連項目</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=33" title="節を編集: 関連項目"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Atom_(%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E8%A8%98%E8%BF%B0%E8%A8%80%E8%AA%9E)" class="mw-redirect" title="Atom (ハードウェア記述言語)">Atom</a> - Haskell言語ベースのハードウェア記述言語</li> <li><a href="/wiki/Bluespec" title="Bluespec">Bluespec</a> - Haskell言語ベースのハードウェア記述言語</li> <li><a href="/wiki/Hydra" class="mw-disambig" title="Hydra">Hydra</a> - Haskell言語ベースのハードウェア記述言語</li> <li><span title="リンク先の項目はまだありません。新規の執筆や他言語版からの翻訳が望まれます。"><a href="/w/index.php?title=Idris&action=edit&redlink=1" class="new" title="Idris (存在しないページ)">Idris</a><span style="font-size: 0.77em; font-weight: normal;" class="noprint">(<a href="https://en.wikipedia.org/wiki/Idris" class="extiw" title="en:Idris">英語版</a>)</span></span> - Haskellに似た構文を持つ、<a href="/wiki/%E4%BE%9D%E5%AD%98%E5%9E%8B" title="依存型">依存型</a>を持つ、正格な純粋関数型言語</li> <li><a href="/wiki/Elm_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="Elm (プログラミング言語)">Elm</a> - JavaScriptのコードを生成するリアクティブなプログラミング言語</li> <li><a href="/w/index.php?title=Fay&action=edit&redlink=1" class="new" title="Fay (存在しないページ)">Fay</a> - JavaScriptのコードを生成するHaskellのサブセット</li> <li><a href="/wiki/%E3%82%AA%E3%83%95%E3%82%B5%E3%82%A4%E3%83%89%E3%83%AB%E3%83%BC%E3%83%AB" title="オフサイドルール">オフサイドルール</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="外部リンク"><span id=".E5.A4.96.E9.83.A8.E3.83.AA.E3.83.B3.E3.82.AF"></span>外部リンク</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Haskell&action=edit&section=34" title="節を編集: 外部リンク"><span>編集</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><span class="official-website"><span class="url"><a rel="nofollow" class="external text" href="https://www.haskell.org">公式ウェブサイト</a></span></span> <ul><li><a rel="nofollow" class="external text" href="http://haskell.org/hawiki/">Old HaWiki</a> - Haskellのいくつかの古い話題の議論</li> <li><a rel="nofollow" class="external text" href="http://haskell.org/haskellwiki/Humor">Haskell Humor</a></li> <li><a rel="nofollow" class="external text" href="http://www.haskell.org/~pairwise/intro/intro.html">Haskell Tutorial for C Programmers</a> by Eric Etheridge</li> <li><a rel="nofollow" class="external text" href="http://haskell.org/tutorial/">A Gentle Introduction to Haskell 98</a> - (<a rel="nofollow" class="external autonumber" href="http://www.haskell.org/tutorial/haskell-98-tutorial.pdf">[1]</a>)</li> <li><a rel="nofollow" class="external text" href="http://haskell.cs.yale.edu/wp-content/uploads/2011/03/HaskellVsAda-NSWC.pdf">Haskell vs. Ada vs. C++ vs. Awk vs. ... An Experiment in Software Prototyping Productivity</a> - (<a href="/wiki/PDF" class="mw-redirect" title="PDF">PDF</a>ファイル)</li></ul></li> <li><a rel="nofollow" class="external text" href="http://www.umiacs.umd.edu/~hal/docs/daume02yaht.pdf">Yet Another Haskell Tutorial</a> - Hal Daume IIIによるよいHaskellチュートリアル。公式チュートリアルに先立つより厳選された知識。</li> <li><a rel="nofollow" class="external text" href="http://www.willamette.edu/~fruehr/haskell/evolution.html">The Evolution of a Haskell Programmer</a> - Haskellで使える異なるプログラミングスタイルのちょっとユーモラスな概説。</li> <li><a rel="nofollow" class="external text" href="http://haskell.readscheme.org">An Online Bibliography of Haskell Research</a></li></ul> <div class="navbox" aria-labelledby="コンピュータ・プログラミング言語" style="border-collapse:collapse;padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="background:transparent;color:inherit;min-width:100%;border-spacing:0px;border-collapse:separate"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div style="float:left;width:6em;text-align:left"><div class="noprint plainlinks navbar hlist" style="white-space:nowrap;font-size:60%;font-weight:normal;background-color:transparent;padding:0;color:#000;;border:none;"><ul style="display:inline"><li><a href="/wiki/Template:%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E4%B8%80%E8%A6%A7" title="Template:プログラミング言語一覧"><span title="このテンプレートを表示します" style="font-size:125%;;;border:none;">表</span></a></li><li><a href="/w/index.php?title=Template%E2%80%90%E3%83%8E%E3%83%BC%E3%83%88:%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E4%B8%80%E8%A6%A7&action=edit&redlink=1" class="new" title="Template‐ノート:プログラミング言語一覧 (存在しないページ)"><span title="このテンプレートのノートを表示します" style="font-size:125%;color:#002bb8;;;border:none;">話</span></a></li><li><a class="external text" href="https://ja.wikipedia.org/w/index.php?title=Template%3A%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E4%B8%80%E8%A6%A7&action=edit"><span title="このテンプレートを編集します。保存の前にプレビューを忘れずに。" style="font-size:125%;color:#002bb8;;;border:none;">編</span></a></li><li><a class="external text" href="https://ja.wikipedia.org/w/index.php?title=Template%3A%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E4%B8%80%E8%A6%A7&action=history"><span title="このテンプレートの過去の版を表示します" style="font-size:125%;color:#002bb8;;;border:none;">歴</span></a></li></ul></div></div><div id="コンピュータ・プログラミング言語" style="font-size:110%;margin:0 6em">コンピュータ・<a href="/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E" title="プログラミング言語">プログラミング言語</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/%E4%BD%8E%E6%B0%B4%E6%BA%96%E8%A8%80%E8%AA%9E" title="低水準言語">低水準言語</a></th><td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"> <ul><li><a href="/wiki/%E6%A9%9F%E6%A2%B0%E8%AA%9E" title="機械語">機械語</a></li> <li><a href="/wiki/%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%AA%E8%A8%80%E8%AA%9E" title="アセンブリ言語">アセンブリ言語</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/%E9%AB%98%E6%B0%B4%E6%BA%96%E8%A8%80%E8%AA%9E" title="高水準言語">高水準言語</a></th><td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"> </div><table class="nowraplinks navbox-subgroup" style="min-width:100%;border-spacing:0px;border-collapse:separate"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">1950年代</th><td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"> <ul><li><span lang="en"><a href="/wiki/FORTRAN" class="mw-redirect" title="FORTRAN">FORTRAN</a></span></li> <li><span lang="en"><a href="/wiki/ALGOL" title="ALGOL">ALGOL</a></span></li> <li><span lang="en"><a href="/wiki/RPG_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E8%A8%80%E8%AA%9E)" title="RPG (プログラム言語)">RPG</a></span></li> <li><span lang="en"><a href="/wiki/COBOL" title="COBOL">COBOL</a></span></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">1960年代</th><td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"> <ul><li><span lang="en"><a href="/wiki/LISP" title="LISP">LISP</a></span></li> <li><a href="/wiki/CPL_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="CPL (プログラミング言語)"><span lang="en">CPL</span></a></li> <li><span lang="en"><a href="/wiki/BASIC" title="BASIC">BASIC</a></span></li> <li><span lang="en"><a href="/wiki/PL/I" title="PL/I">PL/I</a></span></li> <li><span lang="en"><a href="/wiki/APL" title="APL">APL</a></span></li> <li><span lang="en"><a href="/wiki/BCPL" title="BCPL">BCPL</a></span></li> <li><span lang="en"><a href="/wiki/Simula" title="Simula">Simula</a></span></li> <li><span lang="en"><a href="/wiki/LOGO" title="LOGO">LOGO</a></span></li> <li><span lang="en"><a href="/wiki/B%E8%A8%80%E8%AA%9E" title="B言語">B</a></span></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">1970年代</th><td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"> <ul><li><span lang="en"><a href="/wiki/Forth" title="Forth">Forth</a></span></li> <li><span lang="fr"><a href="/wiki/Pascal" title="Pascal">Pascal</a></span></li> <li><a href="/wiki/C%E8%A8%80%E8%AA%9E" title="C言語"><span lang="en">C</span></a></li> <li><span lang="fr"><a href="/wiki/Prolog" title="Prolog">Prolog</a></span></li> <li><span lang="en"><a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a></span></li> <li><span lang="en"><a href="/wiki/Scheme" title="Scheme">Scheme</a></span></li> <li><a href="/wiki/ML_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="ML (プログラミング言語)"><span lang="en">ML</span></a></li> <li><span lang="en"><a href="/wiki/AWK" title="AWK">AWK</a></span></li> <li><span lang="en"><a href="/wiki/Ada" title="Ada">Ada</a></span></li> <li><span lang="de"><a href="/wiki/Modula-2" title="Modula-2">Modula-2</a></span></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">1980年代</th><td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"> <ul><li><span lang="en"><a href="/wiki/C%2B%2B" title="C++">C++</a></span></li> <li><span lang="en"><a href="/wiki/Objective-C" title="Objective-C">Objective-C</a></span></li> <li><span lang="en"><a href="/wiki/Common_Lisp" title="Common Lisp">Common Lisp</a></span></li> <li><span lang="fr"><a href="/wiki/Eiffel" title="Eiffel">Eiffel</a></span></li> <li><span lang="en"><a href="/wiki/Erlang" title="Erlang">Erlang</a></span></li> <li><span lang="fr"><a href="/wiki/Esterel" title="Esterel">Esterel</a></span></li> <li><span lang="fr"><a href="/wiki/Lustre_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="Lustre (プログラミング言語)">Lustre</a></span></li> <li><span lang="en"><a href="/wiki/Perl" title="Perl">Perl</a></span></li> <li><span lang="en"><a href="/wiki/Mathematica" title="Mathematica">Mathematica</a></span></li> <li><span lang="en"><a href="/wiki/J_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="J (プログラミング言語)">J</a></span></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">1990年代</th><td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"> <ul><li><span lang="en"><a href="/wiki/Python" title="Python">Python</a></span></li> <li><span lang="en"><a href="/wiki/Tcl" title="Tcl">Tcl</a></span></li> <li><span lang="en"><a class="mw-selflink selflink">Haskell</a></span></li> <li><span lang="en"><a href="/wiki/Visual_Basic" title="Visual Basic">Visual Basic</a></span></li> <li><span lang="en"><a href="/wiki/Ruby" title="Ruby">Ruby</a></span></li> <li><span lang="pt"><a href="/wiki/Lua" title="Lua">Lua</a></span></li> <li><span lang="en"><a href="/wiki/Delphi" title="Delphi">Delphi</a></span></li> <li><span lang="en"><a href="/wiki/Java" title="Java">Java</a></span></li> <li><span lang="en"><a href="/wiki/ECMAScript" title="ECMAScript">ECMAScript</a></span> (<span lang="en"><a href="/wiki/JavaScript" title="JavaScript">JavaScript</a></span>)</li> <li><span lang="en"><a href="/wiki/PHP_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="PHP (プログラミング言語)">PHP</a></span></li> <li><span lang="en"><a href="/wiki/OCaml" title="OCaml">OCaml</a></span></li> <li><span lang="en"><a href="/wiki/SuperCollider" title="SuperCollider">SuperCollider</a></span></li> <li><span lang="en"><a href="/wiki/R%E8%A8%80%E8%AA%9E" title="R言語">R</a></span></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">2000年代</th><td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"> <ul><li><span lang="en"><a href="/wiki/C_Sharp" title="C Sharp">C#</a></span></li> <li><span lang="en"><a href="/wiki/VB.NET" class="mw-redirect" title="VB.NET">VB.NET</a></span></li> <li><span lang="en"><a href="/wiki/Scala" title="Scala">Scala</a></span></li> <li><span lang="en"><a href="/wiki/Clojure" title="Clojure">Clojure</a></span></li> <li><span lang="en"><a href="/wiki/D%E8%A8%80%E8%AA%9E" title="D言語">D</a></span></li> <li><span lang="en"><a href="/wiki/F_Sharp" title="F Sharp">F#</a></span></li> <li><span lang="en"><a href="/wiki/Go_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="Go (プログラミング言語)">Go</a></span></li> <li><span lang="en"><a href="/wiki/Nim" title="Nim">Nim</a></span></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">2010年代</th><td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"> <ul><li><span lang="en"><a href="/wiki/Dart" title="Dart">Dart</a></span></li> <li><span lang="en"><a href="/wiki/Ceylon" title="Ceylon">Ceylon</a></span></li> <li><span lang="en"><a href="/wiki/Elixir_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="Elixir (プログラミング言語)">Elixir</a></span></li> <li><span lang="en"><a href="/wiki/Crystal_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="Crystal (プログラミング言語)">Crystal</a></span></li> <li><span lang="en"><a href="/wiki/Hack_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="Hack (プログラミング言語)">Hack</a></span></li> <li><span lang="en"><a href="/wiki/Swift_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="Swift (プログラミング言語)">Swift</a></span></li> <li><span lang="en"><a href="/wiki/Rust_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="Rust (プログラミング言語)">Rust</a></span></li> <li><span lang="en"><a href="/wiki/Raku" title="Raku">Raku</a></span></li> <li><span lang="en"><a href="/wiki/Elm_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="Elm (プログラミング言語)">Elm</a></span></li> <li><span lang="en"><a href="/wiki/Julia_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="Julia (プログラミング言語)">Julia</a></span></li> <li><span lang="en"><a href="/wiki/Kotlin" title="Kotlin">Kotlin</a></span></li> <li><span lang="en"><a href="/wiki/Zig_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)" title="Zig (プログラミング言語)">Zig</a></span></li></ul> </div></td></tr></tbody></table><div> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">架空の言語</th><td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"> <ul><li><a href="/wiki/%E6%93%AC%E4%BC%BC%E8%A8%80%E8%AA%9E" title="擬似言語">擬似言語</a></li> <li><a href="/wiki/CASL" title="CASL">CASL</a></li> <li><a href="/wiki/CAP-X" title="CAP-X">CAP-X</a></li></ul> </div></td></tr><tr><td class="navbox-abovebelow" colspan="2"> <ul><li><a href="/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E5%B9%B4%E8%A1%A8" title="プログラミング言語年表">年表</a></li> <li><a href="/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%91%E3%83%A9%E3%83%80%E3%82%A4%E3%83%A0" title="プログラミングパラダイム">パラダイム</a></li> <li><a href="/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E4%B8%80%E8%A6%A7" title="プログラミング言語一覧">一覧</a></li></ul></td></tr></tbody></table></div> <style data-mw-deduplicate="TemplateStyles:r96783592">.mw-parser-output .asbox{position:relative;overflow:hidden}.mw-parser-output .asbox table{background:transparent}.mw-parser-output .asbox p{margin:0}.mw-parser-output .asbox p+p{margin-top:0.25em}.mw-parser-output .asbox{font-size:90%}.mw-parser-output .asbox-note{font-size:90%}.mw-parser-output .asbox .navbar{position:absolute;top:-0.90em;right:1em;display:none}</style><div role="note" class="metadata plainlinks asbox stub"><table role="presentation"><tbody><tr class="noresize"><td><span typeof="mw:File"><a href="/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:PC_template.svg" class="mw-file-description"><img alt="スタブアイコン" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/be/PC_template.svg/40px-PC_template.svg.png" decoding="async" width="40" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/b/be/PC_template.svg/60px-PC_template.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/be/PC_template.svg/80px-PC_template.svg.png 2x" data-file-width="48" data-file-height="48" /></a></span></td><td><p class="asbox-body">この項目は、<a href="/wiki/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF" title="コンピュータ">コンピュータ</a>に関連した<b><a href="/wiki/Wikipedia:%E3%82%B9%E3%82%BF%E3%83%96" title="Wikipedia:スタブ">書きかけの項目</a></b>です。<a class="external text" href="https://ja.wikipedia.org/w/index.php?title=Haskell&action=edit">この項目を加筆・訂正</a>などしてくださる<a href="/wiki/Category:%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E9%96%A2%E9%80%A3%E3%81%AE%E3%82%B9%E3%82%BF%E3%83%96%E9%A0%85%E7%9B%AE" title="Category:コンピュータ関連のスタブ項目">協力者を求めています</a>(<a href="/wiki/%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88:%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF" title="プロジェクト:コンピュータ">PJ:コンピュータ</a>/<a href="/wiki/Portal:%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF" title="Portal:コンピュータ">P:コンピュータ</a>)。</p></td></tr></tbody></table><style data-mw-deduplicate="TemplateStyles:r103358373">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline-block;word-break:keep-all}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd:after,.mw-parser-output .hlist li:after{content:" ·\a0 ";font-weight:bold}.mw-parser-output .hlist-pipe dd:after,.mw-parser-output .hlist-pipe li:after{content:" |\a0 ";font-weight:normal}.mw-parser-output .hlist-hyphen dd:after,.mw-parser-output .hlist-hyphen li:after{content:" -\a0 ";font-weight:normal}.mw-parser-output .hlist-comma dd:after,.mw-parser-output .hlist-comma li:after{content:"、";font-weight:normal}.mw-parser-output .hlist-slash dd:after,.mw-parser-output .hlist-slash li:after{content:" /\a0 ";font-weight:normal}.mw-parser-output .hlist dd:last-child:after,.mw-parser-output .hlist dt:last-child:after,.mw-parser-output .hlist li:last-child:after{content:none}.mw-parser-output .hlist dd dd:first-child:before,.mw-parser-output .hlist dd dt:first-child:before,.mw-parser-output .hlist dd li:first-child:before,.mw-parser-output .hlist dt dd:first-child:before,.mw-parser-output .hlist dt dt:first-child:before,.mw-parser-output .hlist dt li:first-child:before,.mw-parser-output .hlist li dd:first-child:before,.mw-parser-output .hlist li dt:first-child:before,.mw-parser-output .hlist li li:first-child:before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child:after,.mw-parser-output .hlist dd dt:last-child:after,.mw-parser-output .hlist dd li:last-child:after,.mw-parser-output .hlist dt dd:last-child:after,.mw-parser-output .hlist dt dt:last-child:after,.mw-parser-output .hlist dt li:last-child:after,.mw-parser-output .hlist li dd:last-child:after,.mw-parser-output .hlist li dt:last-child:after,.mw-parser-output .hlist li li:last-child:after{content:")\a0 ";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li:before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child:before,.mw-parser-output .hlist dt ol>li:first-child:before,.mw-parser-output .hlist li ol>li:first-child:before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r96787822">.mw-parser-output .navbar{display:inline;font-size:75%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}.mw-parser-output .infobox .navbar{font-size:88%}.mw-parser-output .navbox .navbar{display:block;font-size:88%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}</style><div class="navbar plainlinks hlist"><ul><li class="nv-view"><a href="/wiki/Template:Computer-stub" title="Template:Computer-stub"><span title="参照先のページを表示します。">表示</span></a></li><li class="nv-edit"><a class="external text" href="https://ja.wikipedia.org/w/index.php?title=Template:Computer-stub&action=edit"><span title="参照先のページを編集します。">編集</span></a></li></ul></div></div> <div role="navigation" class="navbox authority-control" aria-label="Navbox" style="padding:3px"><table class="nowraplinks hlist navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Help:%E5%85%B8%E6%8B%A0%E7%AE%A1%E7%90%86" title="Help:典拠管理">典拠管理データベース</a>: 国立図書館 <span class="mw-valign-text-top noprint" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q34010#identifiers" title="ウィキデータを編集"><img alt="ウィキデータを編集" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></th><td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"> <ul><li><span class="uid"><a rel="nofollow" class="external text" href="http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id=XX541061">スペイン</a></span></li> <li><span class="uid"><a rel="nofollow" class="external text" href="https://catalogue.bnf.fr/ark:/12148/cb12362303j">フランス</a></span></li> <li><span class="uid"><a rel="nofollow" class="external text" href="https://data.bnf.fr/ark:/12148/cb12362303j">BnF data</a></span></li> <li><span class="uid"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4318275-6">ドイツ</a></span></li> <li><span class="uid"><a rel="nofollow" class="external text" href="http://olduli.nli.org.il/F/?func=find-b&local_base=NLX10&find_code=UID&request=987007561153805171">イスラエル</a></span></li> <li><span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh93003496">アメリカ</a></span></li> <li><span class="uid"><abbr title="Haskell (programovací jazyk)"><a rel="nofollow" class="external text" href="https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=ph903880&CON_LNG=ENG">チェコ</a></abbr></span></li></ul> </div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐web.eqiad.main‐7959696d7f‐q7nn8 Cached time: 20250213070854 Cache expiry: 2592000 Reduced expiry: false Complications: [show‐toc] CPU time usage: 0.487 seconds Real time usage: 0.760 seconds Preprocessor visited node count: 6293/1000000 Post‐expand include size: 84228/2097152 bytes Template argument size: 9551/2097152 bytes Highest expansion depth: 23/100 Expensive parser function count: 68/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 78619/5000000 bytes Lua time usage: 0.184/10.000 seconds Lua memory usage: 4499760/52428800 bytes Number of Wikibase entities loaded: 1/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 599.796 1 -total 39.03% 234.121 1 Template:Infobox_プログラミング言語 38.46% 230.675 1 Template:Infobox 11.17% 67.007 1 Template:Reflist 10.20% 61.192 1 Template:Computer-stub 9.77% 58.626 1 Template:Asbox 6.59% 39.540 5 Template:Cite_web 5.47% 32.815 1 Template:Normdaten 5.37% 32.189 1 Template:ConditionalURL 3.80% 22.766 1 Template:URL --> <!-- Saved in parser cache with key jawiki:pcache:1141:|#|:idhash:canonical and timestamp 20250213070854 and revision id 103115824. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?useformat=desktop&type=1x1&usesul3=0" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">「<a dir="ltr" href="https://ja.wikipedia.org/w/index.php?title=Haskell&oldid=103115824">https://ja.wikipedia.org/w/index.php?title=Haskell&oldid=103115824</a>」から取得</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/%E7%89%B9%E5%88%A5:%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA" title="特別:カテゴリ">カテゴリ</a>: <ul><li><a href="/wiki/Category:%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E" title="Category:プログラミング言語">プログラミング言語</a></li><li><a href="/wiki/Category:%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E" title="Category:関数型プログラミング言語">関数型プログラミング言語</a></li><li><a href="/wiki/Category:%E3%82%A8%E3%83%9D%E3%83%8B%E3%83%A0" title="Category:エポニム">エポニム</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">隠しカテゴリ: <ul><li><a href="/wiki/Category:%E5%87%BA%E5%85%B8%E3%82%92%E5%BF%85%E8%A6%81%E3%81%A8%E3%81%99%E3%82%8B%E8%A8%98%E8%BF%B0%E3%81%AE%E3%81%82%E3%82%8B%E8%A8%98%E4%BA%8B/2020%E5%B9%B42%E6%9C%88" title="Category:出典を必要とする記述のある記事/2020年2月">出典を必要とする記述のある記事/2020年2月</a></li><li><a href="/wiki/Category:%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%82%B9%E3%82%BF%E3%83%96%E8%A8%98%E4%BA%8B" title="Category:すべてのスタブ記事">すべてのスタブ記事</a></li><li><a href="/wiki/Category:%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E9%96%A2%E9%80%A3%E3%81%AE%E3%82%B9%E3%82%BF%E3%83%96%E9%A0%85%E7%9B%AE" title="Category:コンピュータ関連のスタブ項目">コンピュータ関連のスタブ項目</a></li><li><a href="/wiki/Category:BNE%E8%AD%98%E5%88%A5%E5%AD%90%E3%81%8C%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E8%A8%98%E4%BA%8B" title="Category:BNE識別子が指定されている記事">BNE識別子が指定されている記事</a></li><li><a href="/wiki/Category:BNF%E8%AD%98%E5%88%A5%E5%AD%90%E3%81%8C%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E8%A8%98%E4%BA%8B" title="Category:BNF識別子が指定されている記事">BNF識別子が指定されている記事</a></li><li><a href="/wiki/Category:BNFdata%E8%AD%98%E5%88%A5%E5%AD%90%E3%81%8C%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E8%A8%98%E4%BA%8B" title="Category:BNFdata識別子が指定されている記事">BNFdata識別子が指定されている記事</a></li><li><a href="/wiki/Category:GND%E8%AD%98%E5%88%A5%E5%AD%90%E3%81%8C%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E8%A8%98%E4%BA%8B" title="Category:GND識別子が指定されている記事">GND識別子が指定されている記事</a></li><li><a href="/wiki/Category:J9U%E8%AD%98%E5%88%A5%E5%AD%90%E3%81%8C%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E8%A8%98%E4%BA%8B" title="Category:J9U識別子が指定されている記事">J9U識別子が指定されている記事</a></li><li><a href="/wiki/Category:LCCN%E8%AD%98%E5%88%A5%E5%AD%90%E3%81%8C%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E8%A8%98%E4%BA%8B" title="Category:LCCN識別子が指定されている記事">LCCN識別子が指定されている記事</a></li><li><a href="/wiki/Category:NKC%E8%AD%98%E5%88%A5%E5%AD%90%E3%81%8C%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E8%A8%98%E4%BA%8B" title="Category:NKC識別子が指定されている記事">NKC識別子が指定されている記事</a></li><li><a href="/wiki/Category:ISBN%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%83%9A%E3%83%BC%E3%82%B8" title="Category:ISBNマジックリンクを使用しているページ">ISBNマジックリンクを使用しているページ</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> 最終更新 2024年12月30日 (月) 00:28 (日時は<a href="/wiki/%E7%89%B9%E5%88%A5:%E5%80%8B%E4%BA%BA%E8%A8%AD%E5%AE%9A#mw-prefsection-rendering" title="特別:個人設定">個人設定</a>で未設定ならば<a href="/wiki/%E5%8D%94%E5%AE%9A%E4%B8%96%E7%95%8C%E6%99%82" title="協定世界時">UTC</a>)。</li> <li id="footer-info-copyright">テキストは<a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.ja">クリエイティブ・コモンズ 表示-継承ライセンス</a>のもとで利用できます。追加の条件が適用される場合があります。詳細については<a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">利用規約</a>を参照してください。</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy/ja">プライバシー・ポリシー</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A2%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">ウィキペディアについて</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:%E5%85%8D%E8%B2%AC%E4%BA%8B%E9%A0%85">免責事項</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">行動規範</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">開発者</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/ja.wikipedia.org">統計</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookieに関する声明</a></li> <li id="footer-places-mobileview"><a href="//ja.m.wikipedia.org/w/index.php?title=Haskell&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">モバイルビュー</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" lang="en" 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"><picture><source media="(min-width: 500px)" srcset="/w/resources/assets/poweredby_mediawiki.svg" width="88" height="31"><img src="/w/resources/assets/mediawiki_compact.svg" alt="Powered by MediaWiki" width="25" height="25" loading="lazy"></picture></a></li> </ul> </footer> </div> </div> </div> <div class="vector-header-container vector-sticky-header-container"> <div id="vector-sticky-header" class="vector-sticky-header"> <div class="vector-sticky-header-start"> <div class="vector-sticky-header-icon-start vector-button-flush-left vector-button-flush-right" aria-hidden="true"> <button class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-sticky-header-search-toggle" tabindex="-1" data-event-name="ui.vector-sticky-search-form.icon"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>検索</span> </button> </div> <div role="search" class="vector-search-box-vue vector-search-box-show-thumbnail vector-search-box"> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail"> <form action="/w/index.php" id="vector-sticky-search-form" class="cdx-search-input cdx-search-input--has-end-button"> <div 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="Wikipedia内を検索"> <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="特別:検索"> </div> <button class="cdx-button cdx-search-input__end-button">検索</button> </form> </div> </div> </div> <div class="vector-sticky-header-context-bar"> <nav aria-label="目次" class="vector-toc-landmark"> <div id="vector-sticky-header-toc" class="vector-dropdown mw-portlet mw-portlet-sticky-header-toc vector-sticky-header-toc vector-button-flush-left" > <input type="checkbox" id="vector-sticky-header-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-sticky-header-toc" class="vector-dropdown-checkbox " aria-label="目次の表示・非表示を切り替え" > <label id="vector-sticky-header-toc-label" for="vector-sticky-header-toc-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-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">目次の表示・非表示を切り替え</span> </label> <div class="vector-dropdown-content"> <div id="vector-sticky-header-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div class="vector-sticky-header-context-bar-primary" aria-hidden="true" ><span class="mw-page-title-main">Haskell</span></div> </div> </div> <div class="vector-sticky-header-end" aria-hidden="true"> <div class="vector-sticky-header-icons"> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-talk-sticky-header" tabindex="-1" data-event-name="talk-sticky-header"><span class="vector-icon mw-ui-icon-speechBubbles mw-ui-icon-wikimedia-speechBubbles"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-subject-sticky-header" tabindex="-1" data-event-name="subject-sticky-header"><span class="vector-icon mw-ui-icon-article mw-ui-icon-wikimedia-article"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-history-sticky-header" tabindex="-1" data-event-name="history-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-history mw-ui-icon-wikimedia-wikimedia-history"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only mw-watchlink" id="ca-watchstar-sticky-header" tabindex="-1" data-event-name="watch-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-star mw-ui-icon-wikimedia-wikimedia-star"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-edit-sticky-header" tabindex="-1" data-event-name="wikitext-edit-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-wikiText mw-ui-icon-wikimedia-wikimedia-wikiText"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-ve-edit-sticky-header" tabindex="-1" data-event-name="ve-edit-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-edit mw-ui-icon-wikimedia-wikimedia-edit"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-viewsource-sticky-header" tabindex="-1" data-event-name="ve-edit-protected-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-editLock mw-ui-icon-wikimedia-wikimedia-editLock"></span> <span></span> </a> </div> <div class="vector-sticky-header-buttons"> <button class="cdx-button cdx-button--weight-quiet mw-interlanguage-selector" id="p-lang-btn-sticky-header" tabindex="-1" data-event-name="ui.dropdown-p-lang-btn-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-language mw-ui-icon-wikimedia-wikimedia-language"></span> <span>54の言語版</span> </button> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive" id="ca-addsection-sticky-header" tabindex="-1" data-event-name="addsection-sticky-header"><span class="vector-icon mw-ui-icon-speechBubbleAdd-progressive mw-ui-icon-wikimedia-speechBubbleAdd-progressive"></span> <span>話題追加</span> </a> </div> <div class="vector-sticky-header-icon-end"> <div class="vector-user-links"> </div> </div> </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-b766959bd-hqzhj","wgBackendResponseTime":123,"wgPageParseReport":{"limitreport":{"cputime":"0.487","walltime":"0.760","ppvisitednodes":{"value":6293,"limit":1000000},"postexpandincludesize":{"value":84228,"limit":2097152},"templateargumentsize":{"value":9551,"limit":2097152},"expansiondepth":{"value":23,"limit":100},"expensivefunctioncount":{"value":68,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":78619,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 599.796 1 -total"," 39.03% 234.121 1 Template:Infobox_プログラミング言語"," 38.46% 230.675 1 Template:Infobox"," 11.17% 67.007 1 Template:Reflist"," 10.20% 61.192 1 Template:Computer-stub"," 9.77% 58.626 1 Template:Asbox"," 6.59% 39.540 5 Template:Cite_web"," 5.47% 32.815 1 Template:Normdaten"," 5.37% 32.189 1 Template:ConditionalURL"," 3.80% 22.766 1 Template:URL"]},"scribunto":{"limitreport-timeusage":{"value":"0.184","limit":"10.000"},"limitreport-memusage":{"value":4499760,"limit":52428800}},"cachereport":{"origin":"mw-web.eqiad.main-7959696d7f-q7nn8","timestamp":"20250213070854","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Haskell","url":"https:\/\/ja.wikipedia.org\/wiki\/Haskell","sameAs":"http:\/\/www.wikidata.org\/entity\/Q34010","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q34010","author":{"@type":"Organization","name":"\u30a6\u30a3\u30ad\u30e1\u30c7\u30a3\u30a2\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u8ca2\u732e\u8005"},"publisher":{"@type":"Organization","name":"\u30a6\u30a3\u30ad\u30e1\u30c7\u30a3\u30a2\u8ca1\u56e3","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2003-02-13T01:59:01Z","dateModified":"2024-12-30T00:28:36Z","image":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/1\/1c\/Haskell-Logo.svg","headline":"\u975e\u6b63\u683c\u306a\u8a55\u4fa1\u3092\u7279\u5fb4\u3068\u3059\u308b\u7d14\u7c8b\u95a2\u6570\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e"}</script> </body> </html>