haskell-jp / questions #102 at 2022-09-09 17:31:28 +0900

Haskellそのものとは関係ない質問になるので恐縮ですがお聞かせ下さい

プログラミング初心者やHaskellの周辺に全く触れたことない人向けに一時間程度Haskellについて話す機会を得たのですが、皆さんならどういった内容を話すと良いと思われますか?
かりんとう
細かいシチュエーションが分かっていませんが自分だったら例えばこんな感じかな?
あくまで私の感覚なので、ちょっと違うというのがあれば後学のためにも指摘歓迎です。
自分も熟練者ではないのでそういう人の一意見ということで。

[導入]
・「遅延評価」や「静的多相型付け」の特徴がある関数型言語
・他のプログラミング言語と一般的に比べて型の力が重視・強化されている
[顕著な利点]
・入出力があることを表す型があることにより、入出力を意識的に管理しやすい
 →結果的に入出力のコードが分散されない構造になりやすく、見通しが良くなりやすい
・文脈の概念「失敗がありうる、など」を扱うことができ、関数内でその文脈が共有されるため、高度なことを簡潔に表現できる
 →文脈は戻り値の型で決定される、また、関数の戻り値は関数内の最後の処理の値である
[顕著な欠点]
・GUIなものを作ろうとするなら標準ではできないのでサードパーティーのライブラリが必要
 →サードパーティーのライブラリ自体は充分なクオリティのものが複数ある
・依存関係の解決に慣れが要り、全てのライブラリを最新バージョンにすると大抵依存関係で弾かれる
 →直接的に必要なライブラリのアップロード日時以前の直近にアップロードされた依存ライブラリのバージョンを探して指定、が安定
[他の特徴]
・遅延評価(結果が必要になったら計算する)
 →例えば「無限長の素数リストを生成し、先頭10個を取得する」といった内容の記述ができ、数学的な定義に近い記述がしやすい
・静的型付け
 →コンパイル時に型が決定されている必要があるが、Haskell独自の型チェックが強力に働きメリットが大きい
・多相型付け
 →抽象的な型を指定することもでき、静的型付けの制約のコンパイル時型決定のデメリットも制御できる
・カリー化(関数の引数の分解)
 →関数の複数の引数の一つを埋めた関数を生成する(部分適用)といったことが簡潔にできる
・関数合成
 →関数を合成する演算子(中置関数) . があり、カリー化などと合わせて複数のパーツとなる関数から必要な関数を得ることが便利
[総評]
・簡単なことは難しくなるが難しいことは簡単にできる、と評されたりする
・実際に使用されているプロジェクトの比率は少ないが、質は高い傾向に感じる
・アプローチが独特であり、美しさに魅了される人と拒絶反応の人に結構分かれるらしい
具体的に書いていただきありがとうございます(詳細は私もまだわかっていなかったりします)
利点・欠点としていくつか話題を挙げるのは実際に触れるときの指標にもなりそうで良いですね
かりんとう
参考になっているのであれば嬉しいです。
具体的な項目を挙げましたが、大局的にはそうですね、利点だけでなく欠点も伝えるのが聞く側にとって親切で良いことだと思います。
ちなみに自分も他の方の意見がどうなのかは気になります。