Haskellでつまずいた所まとめ
Haskellを学ぶ上でつまずいた所まとめ
Twitter上で#1ふぉぼごとにHaskellでつまずいたところを語るで出てきたもの一覧とも言う
適切な入門記事がない
Haskellをさらっと体験してみたくてWebでHaskell入門記事を読むもやる気がない(Haskellの凄さを感じられない)記事かやる気がありすぎる(初学者にとっては壁が高すぎる)記事の2つに1つでアッってなった 結局7shiさんの記事にお世話になりましたstackによる環境構築
環境構築につまずく というのもstackの進化が早すぎて一次ソース以外信用ならんという大変な自体が原因 大半の日本語記事がすでに古くあてにならないというのは完全に一種の罠であるライブラリの使い方、Hackageの読み方
またHaskellというかstackの問題だけど、ライブラリのインポート方法がわからない問題
いや、Control.MonadはbaseだけどControl.Monad.Stateがmtlとか初学者にはちょっとよくわからないよ$
と.
$
と( . )
を使いこなすのに苦労した 意図と違う挙動をしてなんでだって考え込んだことは多数である型コンストラクタとkind
型コンストラクタ周りも理解するのに中々時間がかかった。* -> * とか摩訶不思議型クラスの使い方
型クラスは使いこなすのに結構たいへんだった なんどno instacesうんぬんと見たことかMonadへの理解
みんな大好きMonad 圏論を学び始める羽目に 結局Monadがcomputationであるということを理解するのに非常に時間がかかった
世のMonadチュートリアルはそびえ立つ糞の山
MonadはComputationの一言さえあればこんなに悩むこともないStateとST
State, STの使い所や使い分け だれでもつまずくはこんなんモナド変換子とはなんなのか
モナド変換子 某氏のモナドモナドの記事を読むことによってスッキリ解決したがそれまでなんとも言えないもやもやを抱えていたものであるパフォーマンスを考えた評価戦略
パフォーマンスのためにサンクを潰す話とかは何回も考えて飲み込んだ記憶適切なライブラリの選択
ライブラリが乱立し戦国時代 何が良いのかわからない 逆に全く存在しないことも多々Category, Arrowの使い所
Category, Arrowの使い所さんがわからない このライブラリの作者天才だと思ってる3つのforall
forall多すぎ問題 貴様どこのシマのforallだ! 存在量化子とかもわからなかったのでTaPLことにDataKindとは???
DataKindが無限にわからない これは一体という気持ちになる 高階多相とかを理解するのもかなり時間がかかったOptics関連
Optics(Lens, Prism) 使う分にはいいんだけどその圏論的背景と中身の実装がやばい 現在進行形で解読中ByteString
ばいとすとりんぐに苦しむのはHaskellerの嗜み遅延入出力
Lazy IO これはつまずきポイントすぎて熟練のHaskellerも避けるレベル 使うなというのが一般的 Conduit使おう記号多すぎ問題
<$>
<.>
>>=
>>>
<<<
&&&&
>=>
…… 記号の多すぎて覚えきれん関数型設計
いざ作ろうとするときにどういう設計がいいのかわからないという問題
自分のスタイルを確立してるけどそれでいいのかもわからんし、誰か論理に立脚した関数型設計の本とか出してNFA
非決定性オートマンから作ろうとすると今まで学んだことが結びついてなくて止まった (ネタ切れで適当になってきた)CPS
継続渡し、使うぶんにはいいけど動作がイマイチ理解しきれなかったRank N types
forallの話とかぶる TaPLがなければ即死だった型レベルプログラミング
型レベルプログラミングでの証明 いよいよやばい世界に来たと恐怖を覚えた
あと文献が散逸してて、体系的に入門できない型レや型族まわりの情報収集
いよいよ文献が論文ばっかになって来たぞ(白目)ekmett神の神託(ライブラリ)の解読
ekmett先生のライブラリの解読 なんだその発想は意味わからんとなるストリーム
初心者ぼく「一体何が一番なんだ???」パフォーマンスチューニング
空間計算量、時間計算量などの割とGHC依存なところが大変
関数型プログラミングの思考法に詳しく書いてあったはずやはり圏論は必要
論文、ライブラリのドキュメントで平然と使われる圏論
さらに圏論に詳しくならないといけないというわけわからん自体
圏論的意味論なんて……なんて……大好きだ!fold
畳み込みとCatamorphismの対応 結構考えたような気がする最適化レベル
各最適化レベルでのGHCの挙動 つまずきポイントというか覚えるのめんどくさいポイント
正直今でも適当演算子のinfix
自分で作ったものにどうつけるかがわからなかった
これも未だに適当Profunctorの使い所
いやこんなん普通わからないでしょ
ありがとうLens>>
の存在意義
Monadが分かったらすっと分かるようにアルゴリズム
手続き型のアルゴリズムを関数型に書き直す まぁそれなりに苦戦する 今でも
珠玉のアルゴリズムとか読むといいのかもしれない関数従属
普通に難しい
どうしても難しい説明になってしまいがち理論とコードの結びつけ
TaPLや圏論の知識とHaskellのGHC拡張周りとの対応付け
基本的にココらへんの説明してくれるような記事はあんまないライブラリを読む
ドキュメントの型をみてこれ、圏論のあれかと推測するの
かなりの慣れが必要だし未だに苦戦してる練習用の題材
練習でなにか作ろうとしてもHaskellの力をフルで発揮できる題材が思いつかない ……思いつかないTwitterのHaskeller強すぎ問題
TwitterのHaskellerが平然と型レベルプログラミングとかしててやばい
おそらく心折れポイントはかなり高い部分
彼らは何をどうやってそこまで行ったのか?
同じレベルの同志を見つけたい初心者がそもそもいない
あまりに怖い言語だという評判が根付いてしまってるので初心者仲間が増えない
増えないのでモチベが保てない中級者になるために必要なことがわからない
中級者向けに何をやればいいかの情報がない
細部に関する情報はあっても体系的なお話がね……
モナド変換子, Eff, Lens, Prism使えれば中級者という見解をもってるので、それやればいいと思う深い記事の必要性
各コンテンツの深掘りした記事などがない
それもそう、深掘りできるほど頭の良い人材が記事を書かないのである!テストの話
Haskellに関するテスト関連の話題が皆無
文献でも確認したのは関数型実践入門だけ型パズル
頭のなかで型の組み合わせをする
これはなになにのインスタンスで……これは存在型にしないと……これは依存型に…… できるか!
強い人達絶対数式で設計してるでしょ!
以上
思いついたらまた随時追加しますが、この時点でつまずきポイントが多すぎる(白目)
後々各つまずきポイントの解決策を(分かるところだけ)書いていく