Haskellは概念モデルのミスに気付くヒントが多い
何か簡単な問題が与えられた時に、
まず、コードのことは置いておいて、概念モデル化を頭の中で試みる
処理の流れや、テストケースを全てpassするような抽象化を考える
その後に、それを元に物理的に実装を始める
ここで、Haskellの標準ライブラリの関数を眺めたりするわけだが、
前段の抽象化がうまくいってると、それらの関数の組み合わせで自然に実装できる体感があるmrsekut.icon
逆に、それがうまくいっていないと、再利用性の低い(具体性の高い)関数を用意しないと実装できない
テストケースを眺めて、なにか見出したルールが4つほどあって、
A,B,Cのケースに対しては統一的に解けるんだけど、
Dのケースを考慮するとそれに特化した関数を用意しないといけないなあ、
みたいになるときはだいたい抽象化にミスっている
(上記の問題ではそれが「"HyperText Markup Language"」のacronym化だった)
Haskellは言語コミュニティの性質上、型で抽象化をやることに対しての知見がかなり溜まっている
FunctorやMonadのような構造を見出して言語全体に浸透させているのはHaskellを触ったことがない人でも知ってるぐらい有名(?)
よほど特殊な課題でない限りは、既存のコンビネータの組み合わせでできる
だから、コードを書くことで、抽象化の評価のフィードバックが得られる
ただまあ、ミスってるということが分かるだけで、正解がわかるわけではないのだがmrsekut.icon
@mrsekut: Haskellで標準にない特化したUtil関数のようなものを作った時、その時点で構造の抽象化にミスってる、ということが感覚的に分かる気がする (気付けるだけで解法がわかるわけではない)