| パラダイム | 純粋に機能的 |
|---|---|
| デザイン: | レナート・オーガストソン、デイブ・バートン、ブライアン・バウテル、ウォーレン・バートン、ジョセフ・ファゼル、ケビン・ハモンド、ラルフ・ヒンゼ、ポール・フダック、ジョン・ヒューズ、トーマス・ジョンソン、マーク・ジョーンズ、サイモン・ペイトン・ジョーンズ、ジョン・ローンチベリー、エリック・メイジャー、ジョン・ピーターソン、アラステア・リード、コリン・ランシマン、フィリップ・ワドラー |
| 初登場 | 1990年[1] |
| 安定リリース | Haskell 2010 [2]
/ 2010年7月 |
| プレビューリリース | Haskell 2020が発表されました[3]
|
| タイピングの規律 | 推測、静的、強い |
| OS | クロスプラットフォーム |
| ファイル名拡張子 | .hs、.lhs |
| Webサイト | 翻訳: |
| 主な実装 | |
| GHC、ハグス、NHC、JHC、Yhc、UHC | |
| 方言 | |
| ゴファー | |
| 影響を受けた | |
| Clean、[4] FP、[4] Gofer、[4] HopeとHope +、[4] Id、[4] ISWIM、[4] KRC、[4] Lisp、[4] Miranda、[4] MLとStandard ML、[4] Orwell、SASL、[4] Scheme、[4] SISAL [4] | |
| 影響を受けた | |
| Agda、[5] Bluespec、[6] C++11 / Concepts、[7] C# / LINQ、[8] [9] [10] [11] CAL、[要出典] Cayenne、[8] Clean、[8] Clojure、[12] CoffeeScript、[13] Curry、[8] Elm、 Epigram、[要出典] Escher、[14] F#、[15] Hack、[16] Idris、[17] Isabelle、[8] Java / Generics、[8] LiveScript、[18] Mercury、[8] Ωmega、PureScript、[19] Python、[8] [20] Raku、[21] Rust、[22] Scala、[8] [23] Swift、[24] Visual Basic 9.0 [8] [9] | |
Haskell(/ ˈ h æ s k əl / [25])は、汎用で静的に型付けされた純粋に関数型の プログラミング言語であり、型推論と遅延評価を備えています。[26] [27]教育、研究、産業用途向けに設計されたHaskellは、型安全な演算子オーバーロードを可能にする型クラスやモナド入出力(IO)など、いくつかのプログラミング言語機能の先駆者です。論理学者Haskell Curryにちなんで名付けられました。[1] Haskellの主な実装はGlasgow Haskell Compiler(GHC)です。
Haskellのセマンティクスは歴史的に、初期のHaskellワーキンググループの取り組みの焦点となったMirandaプログラミング言語のセマンティクスに基づいています。 [28]この言語の最後の正式な仕様は2010年7月に作成されましたが、GHCの開発は言語拡張を通じてHaskellを拡張し続けています。
Haskellは学界と産業界で使用されています。[29] [30] [31] 2021年5月現在、HaskellはチュートリアルのGoogle検索[アップデート]で28番目に人気のあるプログラミング言語であり、[32] GitHubソースコードリポジトリ のアクティブユーザーの1%未満を占めています。 [33]
歴史
1985年にリサーチソフトウェア社がミランダをリリースした後、遅延関数型言語への関心が高まりました。1987年までに、非厳密な純粋関数型プログラミング言語が12種類以上存在しました。ミランダは最も広く使用されていましたが、プロプライエタリソフトウェアでした。オレゴン州ポートランドで開催された関数型プログラミング言語とコンピュータアーキテクチャに関する会議(FPCA '87)では、そのような言語のオープン標準を定義する委員会を設立するという強いコンセンサスが得られました。委員会の目的は、既存の関数型言語を共通の言語に統合し、関数型言語設計の将来の研究の基礎とすることだった。[34]
Haskell 1.0 から 1.4
Haskell は、可能な限り既製のソリューションを統合しようとする委員会によって開発されました。
型安全な 演算子オーバーロードを可能にする型クラスは、当時の言語における等価型と算術オーバーロードのアドホックな処理に対処するために、フィリップ・ワドラーとスティーブン・ブロットによって最初に提案されました。 [35]
Haskell の初期のバージョン 1.2 まで、ユーザー インタラクションと入出力(IO) はストリーム ベースと継続ベースの両方のメカニズムによって処理されていましたが、これらは不十分であると広く考えられていました。[36]バージョン 1.3 では、モナドIO が導入され、型クラスが高次の種類 (型コンストラクタ) に一般化されました。モナド型クラスに構文糖を提供する「do 記法」とともに、これにより Haskell は参照の透明性を維持し、便利なエフェクト システムを実現しました。
初期バージョンにおけるその他の注目すべき変更点は、値間のデータ依存関係を作成し、過度のメモリ消費を避けるために遅延言語で使用される「seq」関数へのアプローチです。これは、リファクタリングをより実用的にするために、型クラスから標準関数に移行しました。
Haskellの最初のバージョン(「Haskell 1.0」)は1990年に定義されました。[1]委員会の努力により、一連の言語定義(1.0、1.1、1.2、1.3、1.4)が生まれました。

ハスケル98
1997年後半、このシリーズはHaskell 98で最高潮に達しました。これは、安定した最小限の移植可能な言語バージョンと、教育用および将来の拡張の基盤となる標準ライブラリを指定することを目的としています。委員会は、実験的な機能を追加および組み込むことでHaskell 98の拡張機能とバリアントを作成することを明示的に歓迎しました。[34]
1999年2月、Haskell 98言語標準は、Haskell 98レポートとして最初に出版されました。[34] 2003年1月には、改訂版がHaskell 98言語とライブラリ:改訂レポートとして出版されました。[27]この言語は急速に進化し続けており、グラスゴーHaskellコンパイラ(GHC)実装が現在の事実上の標準となっています。[37]
ハスケル 2010
2006年初頭、Haskell 98標準の後継となる、非公式にHaskell Primeと呼ばれる標準を定義するプロセスが始まりました。[38]これは、言語定義を改訂するための継続的な増分プロセスとして意図されており、最大1年に1回新しい改訂版が作成されます。Haskell 2010と名付けられた最初の改訂版は、2009年11月に発表され[2]、2010年7月に公開されました。
Haskell 2010 は言語の増分アップデートであり、主に、以前はコンパイラ固有のフラグによって有効にされていた、よく使用され議論の余地のない機能がいくつか組み込まれています。
- 階層的なモジュール名。モジュール名は、1 つの識別子だけではなく、ドットで区切られた大文字の識別子のシーケンスで構成できます。これにより、技術的にはモジュールは単一のモノリシックな名前空間にありますが、モジュールに階層的な名前を付けることができます (たとえば、
Data.Listの代わりにList)。この拡張機能は Haskell 98 の補遺で指定され、実際には広く使用されていました。 - 外部関数インターフェース( FFI) を使用すると、他のプログラミング言語へのバインディングが可能になります。レポートではCへのバインディングのみが指定されていますが、設計上は他の言語へのバインディングも許可されています。これをサポートするために、データ型宣言にコンストラクタを含めないことが許可され、Haskell では構築できない外部データに対して堅牢な nonce 型を使用できるようになりました。この拡張機能は、以前に Haskell 98 レポートの補遺でも指定され、広く使用されていました。
- いわゆるn + kパターン (形式の定義
fact (n+1) = (n+1) * fact n) は許可されなくなりました。この構文糖衣には誤解を招くセマンティクスがあり、コードは 演算子を使用しているように見えますが、実際にはおよび を(+)使用するようにコード糖衣が解除されていました。(-)(>=) - より多くのプログラムが型チェックできるように、型推論のルールが緩和されました。
- いくつかの構文の問題 (形式文法の変更) が修正されました。パターン ガードが追加され、ガード内でのパターン マッチングが可能になりました。演算子の固定性の解決が、実際の使用方法を反映したより簡単な方法で指定されました。言語の演算子とコメントの語彙構文の相互作用におけるエッジ ケースが対処され、do 記法と if-then-else の相互作用が調整されて、予期しない構文エラーが排除されました。
- プラグマ
LANGUAGEが指定されました。2010 年までに、言語に対する数十の拡張機能が広く使用されるようになり、GHC (およびその他のコンパイラ) は、LANGUAGE識別子のリストを使用して個々の拡張機能を指定するためのプラグマを提供しました。Haskell 2010 コンパイラは、このHaskell2010拡張機能をサポートすることが必須であり、Haskell 2010 で追加された拡張機能に対応する他のいくつかの拡張機能をサポートすることが推奨されています。
将来の標準
次の正式な仕様は2020年に予定されていました。[3] 2021年10月29日、GHCバージョン9.2.1でGHC2021拡張機能がリリースされました。これは正式な言語仕様ではありませんが、Haskell 2010に安定して広く使用されているGHC拡張機能をいくつか組み合わせたものです。[39] [40]
特徴
Haskell は、遅延評価、ラムダ式、パターン マッチング、リスト内包、型クラス、型多態性などの機能を備えています。これは純粋に関数的なプログラミング言語であり、関数には通常副作用がありません。関数の型とは直交する副作用を表すために、独自の構造が存在します。純粋関数は、その後実行される副作用を返すことができ、他の言語の不純な関数をモデル化しています。
HaskellはHindley-Milner型推論に基づく強力で静的な型システムを持っています。この分野における主な革新は型クラスであり、もともと言語にオーバーロードを追加するための原理的な方法として考案されましたが、 [41]その後、さらに多くの用途が見つかりました。[42]
副作用を表す構造は、モナドの例です。モナドとは、エラー処理、非決定性、構文解析、ソフトウェア トランザクション メモリなどのさまざまな計算をモデル化できる一般的なフレームワークです。これらは通常のデータ型として定義されていますが、Haskell では、これらを使用するための構文糖を提供しています。
Haskellには公開されたオープンな仕様があり[27]、複数の実装が存在します。その主な実装であるGlasgow Haskell Compiler(GHC)は、ほとんどのプラットフォームで動作するインタープリタとネイティブコード コンパイラの両方です。GHCは、一般化された代数的データ型や型ファミリなどの最近の革新を取り入れた豊富な型システムで知られています。Computer Language Benchmarks Gameでも、並行性と並列性の高性能な実装が強調されています。[43]
この言語には活発で成長を続けるコミュニティが存在し、オンラインパッケージリポジトリHackageでは5,400以上のサードパーティのオープンソースライブラリとツールが利用可能です。[44]
コード例
Haskell の「Hello, World!」プログラム(最後の行のみが厳密に必要です):
module Main ( main ) where -- インタープリタでは不要ですが、モジュールファイルではデフォルトです
main :: IO () -- コンパイラはこの型定義を推論できますmain = putStrLn "Hello, World!"
Haskell の階乗関数は、いくつかの異なる方法で定義されています (最初の行は型注釈で、オプションであり、各実装で同じです)。
階乗:: (積分a ) => a -> a
-- 再帰を使用 (「ifthenelse」式を使用)
factorial n = if n < 2 then 1 else n * factorial ( n - 1 )
-- 再帰を使用(パターンマッチング付き)
factorial 0 = 1 factorial n = n * factorial ( n - 1 )
-- 再帰を使用(ガード付き)
factorial n | n < 2 = 1 |それ以外の場合= n * factorial ( n - 1 )
-- リストと「product」関数を使用する
factorial n = product [ 1 .. n ]
-- fold を使用する (「積」を実装)
factorial n = foldl ( * ) 1 [ 1 .. n ]
-- ポイントフリースタイル
の階乗= foldr ( * ) 1 . enumFromTo 1
Haskell の固定小数点コンビネータを使用すると、明示的な再帰なしでこの関数を記述できます。
Data.Functionをインポートします(修正)
階乗= fac を固定します。ただし、fac f x | x < 2 = 1 |それ以外の場合は= x * f ( x - 1 )
Integer型は任意精度な
ので、このコードはfactorial 100000精度を失うことなく (456,574 桁の数値)
などの値を計算します。
リスト上のクイックソートに似たアルゴリズムの実装。最初の要素がピボットとして取得されます。
-- 型注釈(オプション、各実装で同じ)
quickSort :: Ord a => [ a ] -> [ a ]
-- リスト内包表記を使用する
quickSort [] = [] -- 空のリストはすでにソートされているquickSort ( x : xs ) = quickSort [ a | a <- xs , a < x ] -- リストの左側をソートする++ [ x ] ++ -- ソートされた 2 つの部分の間にピボットを挿入するquickSort [ a | a <- xs , a >= x ] -- リストの右側をソートする
-- フィルターを使用する
quickSort [] = [] quickSort ( x : xs ) = quickSort ( filter ( < x ) xs ) ++ [ x ] ++ quickSort ( filter ( >= x ) xs )
実装
リストされている実装はすべてオープンソースライセンスの下で配布されています。[45]
Haskell 98 標準に完全またはほぼ準拠している実装には次のものがあります。
- グラスゴー・ハスケル・コンパイラ(GHC)は、多くの異なるプロセッサ・アーキテクチャ上のネイティブ・コードにコンパイルされ、 2つの中間言語のいずれか、つまりC--、またはより新しいバージョンではLLVM(旧称Low Level Virtual Machine)ビットコードを介してANSI Cにコンパイルされます。 [46] [47] GHCは事実上の標準Haskell方言となっています。 [48] GHCでのみ動作するライブラリ( OpenGLへのバインディングなど)があります。GHCはHaskellプラットフォームとともに配布されました。
- John Meacham によって書かれた Haskell コンパイラーである Jhc は、生成されたプログラムの速度と効率、および新しいプログラム変換の探求に重点を置いています。
- Ajhc は Jhc のフォークです。
- ユトレヒトHaskellコンパイラ(UHC)は、ユトレヒト大学によるHaskell実装です。[49] Haskell 98のほぼすべての機能に加えて、多くの実験的な拡張機能をサポートしています。属性文法を使用して実装されており、主に生成された型システムと言語拡張の研究に使用されます。
アクティブにメンテナンスされなくなった実装には次のものが含まれます。
- Haskell User's Gofer System ( Hugs ) はバイトコードインタープリタです。かつてはGHCコンパイラと並んで最も広く使われていた実装の一つでしたが[50]、現在ではGHCiにほとんど置き換えられています。グラフィックスライブラリも付属しています。
- HBC は Haskell 1.4 をサポートする初期の実装です。これは、 Lennart AugustssonによってLazy MLに基づいて実装されました。しばらくの間、積極的に開発されていません。
- nhc98 は、メモリ使用量を最小限に抑えることに重点を置いたバイトコード コンパイラです。
- York Haskell コンパイラ ( Yhc ) は nhc98 から派生したもので、よりシンプルで移植性が高く、効率的であること、そして Haskell トレーサーである Hat のサポートを統合することを目標としていました。また、JavaScriptバックエンドも備えており、ユーザーはWeb ブラウザーで Haskell プログラムを実行できました。
完全に Haskell 98 に準拠しておらず、バリアント Haskell 言語を使用する実装には次のものがあります。
- Eta と Frege は、 Java 仮想マシンを対象とした Haskell の方言です。
- Gofer は、Mark Jones によって開発された、コンストラクター クラスと呼ばれる機能を備えた Haskell の教育用方言です。これは、Haskell User's Gofer System (Hugs) に置き換えられました。
- Helium は Haskell の新しい方言です。デフォルトで型クラスを無効にすることで、より明確なエラー メッセージを表示し、学習を容易にすることに重点が置かれています。
注目すべきアプリケーション
- AgdaはHaskellで書かれた証明支援システムである。[51]
- CabalはHaskellのライブラリとプログラムを構築しパッケージ化するためのツールです。[52]
- DarcsはHaskell で書かれたリビジョン コントロール システムで、適用するパッチのより正確な制御など、いくつかの革新的な機能を備えています。
- Glasgow Haskell コンパイラ(GHC) は、他のプログラミング言語における高度な関数型プログラミング機能や最適化のテストベッドとしてもよく使用されます。
- Git-annex は、Gitバージョン管理下で (大きな) データ ファイルを管理するためのツールです。また、分散ファイル同期システム (git-annex アシスタント) も提供します。
- Linspire Linuxはシステムツール開発にHaskellを選択しました。[53]
- Pandoc は、あるマークアップ形式を別の形式に変換するツールです。
- Pugs は、当時はPerl 6 と呼ばれていたが、その後Raku に名前が変更されたプログラミング言語用のコンパイラおよびインタープリタです。
- TidalCyclesはHaskellに埋め込まれたライブコーディング音楽パターン用のドメイン特殊言語です。[54]
- XmonadはX Window System用のウィンドウマネージャであり、完全にHaskellで書かれています。[55]
- GarganText [56]は、HaskellとPureScriptで書かれた、あらゆるウェブブラウザ上で意味解析テキストをマッピングする共同ツールであり、例えば研究コミュニティで最先端のレポートやロードマップを作成するために使用されています。[57]
業界
- Bluespec SystemVerilog (BSV) は、電子機器の設計を目的とした Haskell の言語拡張です。これは、Haskell に組み込まれたドメイン固有言語の例です。さらに、Bluespec, Inc. のツールは Haskell で実装されています。
- 暗号化アルゴリズムの開発と検証のための言語とツールチェーンであるCryptol は、Haskell で実装されています。
- Facebookはスパム対策プログラム[58]をHaskellで実装しており、その基礎となるデータアクセスライブラリはオープンソースソフトウェアとして維持されている[59]。
- CardanoブロックチェーンプラットフォームはHaskellで実装されています。[60]
- GitHubは、信頼できないソースコードの分析、比較、解釈のためのオープンソースライブラリであるSemanticをHaskellで実装しました。[61]
- スタンダードチャータード銀行の金融モデリング言語Muは、厳密なランタイムで実行される構文Haskellです。[62]
- 最初の形式検証された マイクロカーネルであるseL4 は、OS開発者のためのプロトタイプ言語としてHaskellを使用しました。[63] : p.2 同時に、Haskellコードは、定理証明ツールによる自動翻訳のために推論するための実行可能な仕様を定義しました。[63] : p.3 このように、Haskellコードは、最終的なC言語の改良前の中間プロトタイプとして機能しました。[63] : p.3
- ターゲットストアのサプライチェーン最適化ソフトウェアはHaskellで書かれています。[64]
- 共演者[65]
ウェブ
Haskell用に書かれた注目すべきウェブフレームワークには以下のものがある: [66]
批判
2002年にJan-Willem Maessenと2003年にSimon Peyton Jonesは、遅延評価に関連する問題について議論しましたが、その理論的動機も認めていました。 [67] [68]パフォーマンスの向上などの純粋に実用的な考慮事項に加えて、[69]彼らは、遅延評価によってプログラマがコードのパフォーマンス(特にスペースの使用)を判断することがより困難になると指摘しています。
2003年にBastiaan Heeren、Daan Leijen、Arjan van IJzendoornもHaskell学習者にとっての障害をいくつか指摘している。「Haskellの微妙な構文と洗練された型システムは諸刃の剣です。経験豊富なプログラマーには高く評価されていますが、Haskellの汎用性により不可解なエラーメッセージが表示されることが多いため、初心者にとってはフラストレーションの原因にもなります。」[70]エラーメッセージに対処するため、ユトレヒト大学の研究者はHeliumと呼ばれる高度なインタープリターを開発しました。これは、Haskellの一部の機能の汎用性を制限することで、エラーメッセージの使いやすさを向上させました。特に、デフォルトで型クラスを無効にします。[71]
Ben Lippmeier は、型と効果のシステムを備えた、デフォルトで厳密な(明示的な注釈による遅延) Haskell 方言としてDisciple [72]を設計しました。これは、遅延評価の推論や、可変配列などの従来のデータ構造の使用における Haskell の難しさに対処するためです。 [73]彼は (p. 20)、「破壊的な更新は、プログラマーに 2 つの重要で強力なツールを提供します...オブジェクトのコレクションを管理するための効率的な配列のようなデータ構造のセット、および...プログラマーの負担を最小限に抑えながら、プログラムのすべての部分に新しい値をブロードキャストする機能です。」と主張しています。
Standard MLの著者の一人であるロバート・ハーパーは、入門プログラミングを教えるためにHaskellを使用しない理由を述べています。そのなかには、非厳密な評価ではリソースの使用について推論することが難しいこと、遅延評価ではデータ型の定義と帰納的推論が複雑になること、 [74]、 MLのモジュールシステムと比較したHaskellの(古い)クラスシステムの「劣等性」などがあります。[75]
HaskellのビルドツールであるCabalは、歴史的に同じライブラリの複数のバージョンの処理が不十分であるとして批判されてきました。これは「Cabal hell」と呼ばれる問題です。StackageサーバーとStackビルドツールは、これらの批判に応えて作られました。[76] Cabal自体は現在、 Nixに大きく影響を受けたはるかに洗練されたビルドシステムを備えており、[77]バージョン3.0でデフォルトになりました。
関連言語
Clean はHaskell に近い、やや古い親戚です。Haskell との最大の違いは、入出力(I/O) と副作用 にモナドではなく一意性型を使用していることです。
Haskell にヒントを得た、異なる型システムを持つ一連の言語が開発されています。
- 依存型を持つ関数型言語Agda。
- 依存型を持つCayenne。
- Elm は、Web フロントエンド アプリを作成するための関数型言語ですが、ユーザー定義または高次の型クラスやインスタンスはサポートされていませ ん。
- Epigram は、プログラムの特性を証明するのに適した依存型を持つ関数型言語です。
- Idris は、セントアンドリュース大学で開発された、依存型を持つ汎用関数型言語です。
- PureScript はJavaScript に変換されます。
- Ωmega は、新しい種類の導入と型レベルでのプログラミングを可能にする厳密な言語です。
その他の関連言語は次のとおりです:
- Curry は、Haskell をベースにした関数型/論理型プログラミング言語です。
注目すべき Haskell のバリアントには次のものがあります。
- Generic Haskell は、ジェネリックプログラミング用の型システムをサポートする Haskell のバージョンです。
- Hume は、状態がメールボックスへのフィードバックによって保持される、一種の 1 要素メールボックスチャネルのタプル上の状態のないオートマトンとしてのプロセスと、ボックス配線としての出力からチャネルへのマッピング記述に基づく、組み込みシステム用の厳密な関数型言語であり、Haskell のような表現言語と構文を備えています。
会議とワークショップ
Haskell コミュニティは、研究開発活動のために定期的に会合を開いています。主なイベントは次のとおりです。
- 関数型プログラミングに関する国際会議(ICFP)
- Haskell シンポジウム(旧 Haskell ワークショップ)
- Haskell 実装者ワークショップ
- 関数型プログラミングの商用ユーザー(CUFP)
- ZuriHac [78]はチューリッヒで毎年開催されるハッカソンの一種である。
2006年から、プログラミング言語のツールとライブラリの改善を目的とした一連の組織的なハッカソン、Hacシリーズが開催されました。[79]
参考文献
- ^ abc Hudakら2007年。
- ^ ab Marlow, Simon (2009 年 11 月 24 日). 「Announcing Haskell 2010」. Haskell (メーリング リスト) . 2011 年3 月 12 日閲覧。
- ^ ab Riedel, Herbert (2016年4月28日). 「ANN: Haskell Prime 2020 委員会が結成されました」. Haskell-prime (メーリングリスト) . 2017年5月6日閲覧。
- ^ abcdefghijklm ペイトン・ジョーンズ 2003、p. xi
- ^ Norell, Ulf (2008). 「Agda における依存型プログラミング」(PDF) . ヨーテボリ: チャルマース大学. 2012 年2 月 9 日閲覧。
- ^ Hudak et al. 2007、12~38頁、43頁。
- ^ Stroustrup, Bjarne ; Sutton, Andrew (2011). 「C++ 用コンセプトライブラリの設計」(PDF) .ソフトウェア言語エンジニアリング. 2012 年 2 月 10 日時点のオリジナル(PDF)からアーカイブ。
- ^ abcdefghij Hudak et al. 2007、pp.12-45-46。
- ^ ab Meijer, Erik (2006). 「中古プログラミング言語セールスマンの告白: 大衆を Haskell に夢中にさせる」Oopsla 2007 . CiteSeerX 10.1.1.72.868 .
- ^ Meijer, Erik (2009 年 10 月 1 日). 「C9 講義: Erik Meijer 博士 - 関数型プログラミングの基礎、第 1 章 (全 13 章)」. Channel 9. Microsoft. 2012 年 6 月 16 日時点のオリジナルよりアーカイブ。2012 年2 月 9 日閲覧。
- ^ Drobi, Sadek (2009 年 3 月 4 日)。「Erik Meijer on LINQ」。InfoQ。QCon SF 2008: C4Media Inc。2012年2月 9 日閲覧。
{{cite news}}: CS1 メンテナンス: 場所 (リンク) - ^ Hickey, Rich. 「Clojure Bookshelf」. Listmania! . 2017年10月3日時点のオリジナルよりアーカイブ。 2017年10月3日閲覧。
- ^ Heller, Martin (2011 年 10 月 18 日). 「Turn up your nose at Dart and smell the CoffeeScript」. InfoWorld . 2020 年 7 月15 日閲覧。
- ^ 「Escher での宣言型プログラミング」(PDF) 。2015 年10 月 7 日閲覧。
- ^ Syme, Don ; Granicz, Adam; Cisternino, Antonio (2007). Expert F# . Apress . p. 2. F# は、特に
シーケンス式
と
ワークフロー
と呼ばれる 2 つの高度な言語機能に関して Haskell から情報を得ています
。
- ^ 「Facebook、未来のプログラミング言語『Hack』を発表」WIRED 2014年3月20日。
- ^ 「Idris、依存型言語」。2014年10月26日閲覧。
- ^ 「LiveScript Inspiration」 。 2014年2月4日閲覧。
- ^ Freeman, Phil (2016). 「PureScript by Example」 Leanpub . 2017年4月23日閲覧。
- ^ Kuchling, AM「関数型プログラミング HOWTO」。Python v2.7.2 ドキュメント。Python Software Foundation。2012年2 月 9 日閲覧。
- ^ 「用語集」。Perl Foundation Perl 6 Wiki。Perl Foundation。2012年1月21日時点のオリジナルよりアーカイブ。 2012年2月9日閲覧。
- ^ 「影響 - The Rust Reference」。The Rust Reference 。 2023年12月31日閲覧。
- ^ Fogus, Michael (2010年8月6日). 「MartinOdersky take(5) toList」. Send More Paramedics . 2012年2月9日閲覧。
- ^ Lattner, Chris (2014 年 6 月 3 日). 「Chris Lattner のホームページ」. Chris Lattner . 2014 年6 月 3 日閲覧。Swift
言語は、言語の専門家、ドキュメンテーションの達人、コンパイラ最適化の達人、そしてアイデアの洗練と実戦テストに役立つフィードバックを提供してくれた非常に重要な社内ドッグフーディング グループのチームによるたゆまぬ努力の成果です。もちろん、この分野の他の多くの言語が苦労して得た経験からも大きな恩恵を受けており、Objective-C、Rust、Haskell、Ruby、Python、C#、CLU など、数え切れないほど多くの言語からアイデアを得ています。
- ^ Chevalier, Tim (2008 年 1 月 28 日). 「誰か「haskell」の発音を教えてもらえますか?」」Haskell-cafe (メーリング リスト) . 2011 年3 月 12 日閲覧。
- ^元々は Hindley-Milner型推論を使用していた型推論
- ^ abc ペイトン・ジョーンズ 2003年。
- ^ エドワード・クメット、エドワード・クメット – 型クラスと世界
- ^ Mossberg, Erik (2020年6月8日)、erkmos/haskell-companies 、2020年6月22日閲覧
- ^ オサリバン、ブライアン、ゴーゼン、ドナルド・ブルース(2008 年 11 月 15 日)。『リアルワールド Haskell: 信頼できるコード』『O'Reilly Media, Inc.』pp. xxviii– xxxi。ISBN 978-0-596-55430-9。
- ^ 「Haskell in Production: Riskbook」Serokell Software Development Company . 2021年9月7日閲覧。
- ^ “PYPL プログラミング言語人気度インデックス”. pypl.github.io . 2021年5月. 2021年5月7日時点のオリジナルよりアーカイブ。2021年5月16日閲覧。
- ^ Frederickson, Ben. 「GitHub ユーザーによるプログラミング言語のランキング」www.benfrederickson.com . 2019 年9 月 6 日閲覧。
- ^ abc ペイトン・ジョーンズ 2003、序文。
- ^ Wadler, Philip (1988 年 10 月)。「アドホック ポリモーフィズムをアドホックにしない方法」。
- ^ Peyton Jones、Simon (2003)。「ヘアシャツを着る: Haskell の回顧」Microsoft。
- ^ 「Haskell Wiki: 実装」。2012年12月18日閲覧。
- ^ 「Haskell へようこそ」。Haskell Wiki。2016年 2 月 20 日時点のオリジナルよりアーカイブ。2016 年2 月 11 日閲覧。
- ^ GHC 2020 チーム (2021 年 10 月 29 日) GHC 9.2.1 リリース
- ^ GHC および GHC/Haskell のコンパイラと言語の変更案
- ^ Wadler, P.; Blott, S. (1989). 「アドホック ポリモーフィズムをアドホックでなくする方法」。第 16 回 ACM SIGPLAN-SIGACT シンポジウム「プログラミング言語の原理 - POPL '89」の議事録。ACM。pp . 60–76。doi : 10.1145 / 75277.75283。ISBN 978-0-89791-294-5. S2CID 15327197。
- ^ Hallgren, T. (2001 年 1 月)。「関数依存性の楽しみ、または Haskell の静的計算における値としての型」。合同 CS/CE 冬季会議の議事録。スウェーデン、バールベリ。
- ^ コンピュータ言語ベンチマークゲーム
- ^ 「HackageDB 統計」。Hackage.haskell.org。2013 年 5 月 3 日時点のオリジナルよりアーカイブ。2013 年6 月 26 日閲覧。
- ^ Haskell Wiki の「実装」
- ^ 「LLVM バックエンド」。GHC Trac。2019年 3 月 29 日。
- ^ Terei, David A.; Chakravarty, Manuel MT (2010)。「GHC 用の LLVM バックエンド」。ACM SIGPLAN Haskell シンポジウム 2010 の議事録。ACM プレス。
- ^ C. Ryder および S. Thompson (2005)。「HaRe の GHC API への移植」
- ^ ユトレヒト Haskell コンパイラ
- ^ Hudak et al. 2007、12-22ページ。
- ^ Agda 2、Agda Github Community、2021 年 10 月 15 日、2021 年10 月 16 日に取得
- ^ 「The Haskell Cabal」 。 2015年4月8日閲覧。
- ^ 「Linspire/Freespire Core OS チームと Haskell」。Debian Haskell メーリングリスト。2006 年 5 月。2017 年 12 月 27 日時点のオリジナルよりアーカイブ。2006年6 月 14 日閲覧。
- ^ 「Tidal Cycles を使用したライブコード」。Tidal Cycles。2022年1 月 19 日閲覧。
- ^ xmonad.org
- ^ 「Gargantext – Main」. 2023年7月13日.
- ^ David, Chavalarias; et al. (2023年5月8日). デジタルメディアと人類の幸福に関する研究アジェンダに向けて(レポート)。
- ^ 「Haskellでスパムと戦う」Facebookコード。2015年6月26日。 2019年8月11日閲覧。
- ^ 「Haskell用ライブラリHaxlをオープンソース化」Facebook Code 2014年6月10日。 2019年8月11日閲覧。
- ^ 「input-output-hk/cardano-node: Cardano分散型ブロックチェーンに参加するために使用されるコアコンポーネント」。GitHub 。 2022年3月18日閲覧。
- ^ 多言語にわたるソースコードの解析、分析、比較: github/semantic、GitHub、2019年6月7日、 2019年6月7日取得
- ^ 「関数型プログラミングの商用ユーザー向けワークショップレポート」(PDF) 。 2022年6月10日閲覧。
- ^ abcd 機能的正しさの正式な証明は 2009 年に完了しました。Klein , Gerwin; Elphinstone, Kevin; Heiser, Gernot ; Andronick, June; Cock, David; Derrin, Philip; Elkaduwe, Dhammika; Engelhardt, Kai; Kolanski, Rafal; Norrish, Michael; Sewell, Thomas; Tuch, Harvey; Winwood, Simon (2009 年 10 月)。「seL4: OS カーネルの形式検証」(PDF)。第 22 回 ACM オペレーティング システム原則シンポジウム。米国モンタナ州ビッグ スカイ。
- ^ 「Tikhon Jelvis: Haskell at Target」。YouTube 。 2017年4月22日。
- ^ 「Co–StarがHaskellを使用する理由」Co–Star 。 2023年9月30日閲覧。
- ^ 「Web/Frameworks – HaskellWiki」. wiki.haskell.org . 2022年9月17日閲覧。
- ^ Jan-Willem Maessen. Eager Haskell: リソース制限実行による効率的な反復処理。2002 年Association for Computing Machinery (ACM) SIGPLAN Haskell ワークショップの議事録。
- ^ [リンク切れ] Simon Peyton Jones. ヘアシャツを着る: Haskell の回顧録。POPL 2003 での招待講演。
- ^ 「遅延評価は、コンピュータ言語ベンチマーク ゲームなどで優れたパフォーマンスにつながる可能性があります」。2006 年 6 月 27 日。
- ^ ヒーレン、バスティアン;ライジェン、ダーン。ファン・エイゼンドールン、アルジャン (2003)。 「Helium、Haskell の学習用」(PDF)。Haskell に関する 2003 年の ACM SIGPLAN ワークショップの議事録。 62–71ページ。土井:10.1145/871895.871902。ISBN 1581137583.S2CID 11986908 。
- ^ 「Helium Compiler Docs」。GitHub 。 2023年6月9日閲覧。
- ^ 「DDC – HaskellWiki」Haskell.org。2010年12月3日。 2013年6月26日閲覧。
- ^ ベン・リップマイヤー、不純な世界のための型推論と最適化、オーストラリア国立大学(2010年)博士論文、第1章
- ^ ロバート・ハーパー(2011年4月25日)。「怠惰の要点」
- ^ Robert Harper (2011年4月16日). 「モジュールが最も重要」
- ^ 「陰謀団の地獄を解く」www.yesodweb.com . 2019年8月11日閲覧。
- ^ 「cabal new-build の発表: Nix スタイルのローカル ビルド」 。2019年10 月 1 日閲覧。
- ^ https://zfoh.ch/ [裸のURL ]
- ^ 「ハッカソン – HaskellWiki」.
文献
- レポート
- ペイトン・ジョーンズ、サイモン編 (2003)。Haskell 98 言語とライブラリ: 改訂版レポート。ケンブリッジ大学出版局。ISBN 978-0521826143。
- Marlow, Simon編 (2010). Haskell 2010 言語レポート(PDF) . Haskell.org.
- 教科書
- デイビー、アントニー(1992)。Haskellを使った関数型プログラミングシステム入門。ケンブリッジ大学出版局。ISBN 978-0-521-25830-2。
- バード、リチャード(1998)。Haskell を使用した関数型プログラミング入門 (第 2 版)。Prentice Hall Press。ISBN 978-0-13-484346-9。
- Hudak, Paul (2000)。Haskell School of Expression: マルチメディアによる関数型プログラミングの学習。ニューヨーク: Cambridge University Press。ISBN 978-0521643382。
- ハットン、グラハム (2007)。Haskell プログラミング。ケンブリッジ大学出版局。ISBN 978-0521692694。
- オサリバン、ブライアン、スチュワート、ジョン・ゴーゼン (2008)。『Real World Haskell』。セバストポル: O'Reilly。ISBN 978-0-596-51498-3。Real World Haskell(全文)。
- トンプソン、サイモン (2011)。Haskell: 関数型プログラミングの技法 (第 3 版)。Addison- Wesley。ISBN 978-0201882957。
- リポヴァチャ、ミラン(2011年4月)。『Haskellを学んで素晴らしい成果を!』サンフランシスコ:No Starch Press。ISBN 978-1-59327-283-8。(全文)
- バード、リチャード(2014)。Haskellで関数的に考える。ケンブリッジ大学出版局。ISBN 978-1-107-45264-0。
- バード、リチャード、ギボンズ、ジェレミー(2020年7月)。Haskellによるアルゴリズム設計。ケンブリッジ大学出版局。ISBN 978-1-108-49161-7。
- チュートリアル
- Hudak, Paul ; Peterson, John; Fasel, Joseph (2000 年 6 月)。「Haskell バージョン 98 のやさしい入門」。Haskell.org。
- 大いに役立つ Haskell を学ぼう! - コミュニティ バージョン ( learnyouahaskell.github.io)。有名な「Learn You a Haskell」(LYAH) ガイドの最新のコミュニティ管理バージョンです。
- Daumé, Hal III. 「Yet Another Haskell Tutorial」(PDF)。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です。公式チュートリアルよりもはるかに少ない事前知識を前提としています。 - Yorgey, Brent (2009 年 3 月 12 日). 「The Typeclassopedia」(PDF) . The Monad.Reader (13): 17–68.
- Maguire, Sandy (2018)。型で考える: Haskell での型レベルプログラミング。
- 歴史
- Hudak, Paul ; Hughes, John ; Peyton Jones, Simon ; Wadler, Philip (2007)。「Haskell の歴史」(PDF)。プログラミング言語の歴史に関する第 3 回 ACM SIGPLAN 会議の議事録。pp. 12–1–55。doi :10.1145 / 1238844.1238856。ISBN 978-1-59593-766-7. S2CID 52847907。
- Hamilton, Naomi (2008 年 9 月 19 日)。「プログラミング言語の AZ: Haskell」。Computerworld。
外部リンク
- 公式サイト
