Just $ A sandbox

プログラミングと計算機科学とかわいさ

Haskellでつまずいた所まとめ への回答その2

lugendre.hatenablog.com

こちらの記事への回答です。

前回の続き

ただ割と前回と被ってるのでそこはスルーしますねGOMENNNASAI

  • 適切な入門記事がない: 日本語は話者が英語に比べて少なすぎるので敢えて日本語で記事を書くことのうま味がね、はい(英語なら割と情報あります)
  • ライブラリの使い方、Hackageの読み方: そういえばhackageの使い方とかどこにも書いてないし自分もどこで習ったのか忘れてしまったなァ この辺はstackを教える場面でフォローしてあげるべきなのだろうか
  • $ と . : 意外とここで詰まる人多いのかな 型見れば違いは割と明らかな気がするけどそもそも型を頼りにプログラムを書くという言語に慣れてなければ厳しいか
  • 型コンストラクタとkind: これ確かに難しいと思う -> が乱用されてたり不親切な割にはリストやらモナドやらで割と遭遇率も高いし 一応すごいH 8章に解説もあるし、そのへんを見ながらGHCiで遊んで身に付けるとか
  • 型クラスの使い方: 私も苦労したなぁというぼんやりした記憶が(どうやって克服したのか忘れました)
  • Monadへの理解: computationです
  • StateとST: ST使ったことなし
  • パフォーマンスを考えた評価戦略: GHCのユーザーガイドに割とこの辺の話も載っていた記憶が ちなみに日本語版もあります古いけど
  • 適切なライブラリの選択: ちゃんとメンテされてていい感じのインターフェイスを提供しているものがあれば採用し、なければ自作します
  • Category, Arrowの使い所: firstとsecondは便利だけどそれ以外は要らないと思う(暴言)
  • 3つのforall: 普通のforall?とRankNTypesとExistentialQuantificationかな? 同じforallだけど全部別物と認識したほうが
  • DataKindとは???: 初心者でこれいる??? konnさんの記事とか昔読んでたけどもう古いと思う
  • Optics関連: 初心者でこれ(ry ただまぁLensは普通に使えたほうがいいので、getterとしてもsetterとしても働く型、ってところを早めに飲み込んでもらうしかないのではないかなぁ(どっちにもなれるようにforallつけとくんやぐらいのノリでいいと思う)
  • ByteString: 今すぐ窓から投げ捨ててTextを使おう!
  • 遅延入出力: !!!突然の死!!!
  • 関数型設計: Haskellでの設計、人類が未だ到達し得ない地点なので、誰かHaskell設計理論完成させて欲しい
  • NFA: HaskellでNFAとかやったことないし分かりません(大嘘)
  • CPS: これは結構鬼門なので、私としても色々悩んでいるところではある(ひとまずContモナド理解してもらうところが第一歩かな?)(昔記事書きました)
  • 不動点コンビネータ: 初心者がfix使うとこある???は置いといてmaoeさんのループと比較した解説とか
  • Rank N types: type system勉強するのが早そう あるいはGHCユーザーガイドが割と詳しい(基本的に言語拡張関連はユーザーガイドに色々乗ってるので)
  • GHCの気持ちがわからない: GHCはお馬鹿なのか賢いのかよくわからない(一応年々成長して賢くなってるという噂がある)のでだんだん付き合って親密度を高めていきましょう
  • 型レベルプログラミング: コンパイル時にできる&&やりたいことか?は常に意識しておくべきな気がしますね
  • 型レや型族まわりの情報収集: 論文読むしかなさそう
  • ekmett神の神託(ライブラリ)の解読: (私は出てませんが)昔ekmett勉強会なるものがあり
  • ストリーム: この辺のライブラリ戦国時代ってどうなったんだろう…(よく知らない) 概観ならHaskellでなぜストリーム処理ライブラリが必要なのか - fujimuradaisuke's blogこの記事なんかがいいかも
  • パフォーマンスチューニング: 出来ませんので分かりません Haskellスペースリークアドベンドカレンダーとかに色々まとまってそう
  • やはり圏論は必要: せやろか
  • 最適化レベル: 個人的に思うこととして最適化とか細かいことは基本的に放っておいてもOKというか、それで大きく結果が変わることはあんまり多くはないという気持ちですね(パフォーマンスチューニングはボトルネックだけにしよう、みたいな)
  • 演算子のinfix: 演算子の優先順位未だにふわふわしてるし適当に決めてるけど 適当なライブラリのやつ見てそれに合わせるとか
  • GHCGCの動き: よく知りません
  • Profunctorの使い所: 初心者でこれいる???(2回目) (->) の一般化ぐらいでどうかひとつ
  • >> の存在意義: >>= \_ -> って書きたくない本当にただそれだけ
  • アルゴリズム: やっぱりPFADとかで地道に勉強するしかなさそう
  • GUI: まともなライブラリが存在しないので作るなら今!っていう宣伝をしていきたい
  • ghc-ios(番外): エッ
  • 関数従属: class Hoge a b | a -> b はaに対してbが一意に決まるという制約、っていう説明でどうかひとつ
  • 理論とコードの結びつけ: categorical semanticsとかやってると論文でよく出会うやつ(お前圏論は要らないとか言っておきながらそういうこと言うのか!わかる)
  • ライブラリを読む: ライブラリを読むのはHaskell力付けるのにはものすごく有用だと思うので、著名なやつはどんどん内部実装読んでいくと力ついていいと思います
  • 練習用の題材: この辺は自分で考えて好きなもの作るしかないんじゃないかなぁ
  • TwitterのHaskeller強すぎ問題: 強くない人は目立たないだけ
  • 初心者がそもそもいない: 入門して挫折した人とかならいっぱいいますね
  • 中級者になるために必要なことがわからない: Effective Haskellっていう、中級者になるために必要なことを網羅した素晴らしい本が出るってききましたよ!
  • 深い記事の必要性: これは自分も思うんですが、やっぱりHaskellぐらい発展途上な言語だと「自分は途中だ」って感覚が少なからずあるのでは、と思います。で、途中だからまとめたくてもまとめられないし細かい記事を書いてる暇があったら先へ進まないと、みたいな感じでやっていってるんじゃないでしょうか。これは成長過程にある言語のいいところでもあり悪いところでもあると思います。
  • テストの話: ライブラリは割とあると思うので、自分でライブラリ探してきて使う気力のある人ならなんとかなると思う(本末転倒感)(個人的にはtastyが好きです)
  • 数学の知識: 自分はこれが不足したことがあんまりないと思うのであんまり分からない
  • 型パズル: パズルってみんないうけど、普通に使いこなしている人は明確な直観と具体例を伴ってプログラム書いてるはずなので、ちゃんと理解して納得していればパズル感は次第に薄れていくのではなかろうかと思います。

終わりに

雑でごめんなさい(ふわっとしてる、と言って欲しい)

もっと細かく教えてください、って言うのがもしあれば、つまづきどころを添えてリクエストをいただけると記事を書いたりするかもしれません