2021-03-02

そういえば Haskell に入門してました

そういえば、今年から Haskell に入門していました。 日記として、きっかけや現在の所感を残したいと思います

Haskell って何?

Haskell(ハスケル)は,1990 年に発表された純粋関数型言語です. 当時乱立していた(特に遅延評価型の)関数型言語を統一しようというモチベーションから,複数の計算機科学者の手によって生み出されました. ちなみに,Haskell という名前は,アメリカの数学者 Haskell Curry(1900-1982)の名に由来しています.

Haskell について | ウォークスルー Haskell

Python などのオブジェクト指向では、値をプロパティとして持ち関数をメソッドとして持つことによって、 オブジェクトのプロパティによってメソッドの返り値が異なることが多くあります。 一方 Haskell は純粋関数型言語ですので、基本的には関数は同じ引数からは同じ返り値を出し、それによる副作用が生じることはありません。 安心ですね(?)

きっかけは研究室の先輩

この言語を勉強するきっかけになったのは、研究室の先輩からのアドバイス(布教)です。 Haskell は人生を豊かにするだとか言われて始めたのではなく(言われはした)、色々考えて始めました:

  • 速い言語を習得したかった
  • 他の言語もきれいに書けるようになる(らしい)
  • 関数型言語をやってみたかった
  • 数学(圏論)からのアイデアも使用しているため、数学をかじってる身としては武器になるのではと感じた(?)

速い言語に関しては、一応高専で C は 5 年ほど触っていますが、考えなくていいことを考えてるような気分になるので使いたくはないですね(笑) 同様の理由から最近人気な Rust も勉強する価値があるとは思いつつも足が重いです🙄

勉強してきたこと

入門するために、まず最初に ウォークスルー Haskell を始めました。 さくさく全体的に勉強できるので、入門としておススメです

そのあとには書籍の Programming in Haskell 2nd edition を購入して勉強しました。 まだ読了していませんが、問題が充実していて非常に楽しんで進めることができます

学術よりな言語という印象

入門したての印象ですが、構造が非常に深く理論的に作られている感じがしていて、プログラミングの勉強をしている感がとても強いです

同時に、Haskell を書ける人の中でも理解の幅が広いと感じました。 将棋の純文学と言われる「矢倉」のような感じで、それを勉強することで本質を勉強することができそうなできなさそうなという印象です。 たまに Haskell 勉強したことあると Twitter とかブログで拝見するときがありますが、 果たしてどこまで理解しているのか、気になります 👀

ためしにその人に State モナド を教えてくださいと聞いてみたいです(理解できてないので普通に知りたい)

競プロではどうなんだろう

競プロが言語を実践的に勉強する上では非常に役に立つ問題集で、たまに AtCoder で問題を解いています

現在は Python を使っていて、将来的には Haskell にしたいと考えて入門したというのもあるのですが、 提出状況を見ると ABC の e 問題らへんから Haskell での解答数が著しく少ないです( 3 名ほどしかいない)

Haskell で入水したとか挑戦しているとかたまに見ますが、この現状を見るとやっぱ限界あるんかなあと感じました

少なくとも、Python と異なりデータ構造やアルゴリズムが組み込みで提供されていないので、 まずはそれを作るところまではしてみたいと思います

おわりに

Haskell を勉強することで新たな視点を勉強することができているので、人生を豊かにするという言葉はあながち間違いではありません

まだ書籍は読了していないので、勉強を進めていきます

me

Web Frontend が好きな大学院生。大学以降は符号・暗号の研究をしています