すごいHaskell読書会に行ってきた

すごいHaskell読書会 in 大阪 #2 : ATNDに参加したのでそのメモ

講師(謎)でした

毎回誰かがすごいH本の内容について発表していく形式で進めていて、今回は私が発表者ということで資料を作っていきました。

プレゼンの資料はこれ すごい Haskell 読書会 #2

ソースはここ GitHub - koko-u/haskell_book_reading: Reading Learn You a Haskell for Great Good! #2

どうやって作ったの?て質問があったけど、GitHub - jingweno/jekyll_and_hyde: A HTML presentation generator that generates a basic Jekyll scaffold with Slippy hooking up.てツールを使って各ページをmarkdownで書いただけ、haskellシンタックスハイライトっぽいやつをjsで書く方が大変だった。

感想

発表者ということで色々事前に調べました。やっぱり聞くよりも発表する方が 10倍大変、でも勉強になる。

発表の内容はあんまり大した内容ではなかった(まだ第3章とかだしね)。若干、おいてけぼりの参加者がいたような気がするけど、フォローする力量はありませんでした。その辺は勉強会なので、各々自力で頑張って欲しいとか思ってたりもする。

第4章の説明はぜんぜんせずに、演習だけにしていましたが @s_kozake さんがフォローしてくれたのでラッキー。

演習は単純に他の人のコードが見たかったので付けました。これも「丁度よい」問題を見繕うのが難しい。結局、丁度よい感じではなかった。

私が事前に用意していた演習の解答は上記の github のページに code_sample としてアップしました。

勉強会の中で出た話

  • 関数の型宣言を書く利点がよくわからん(小崎)

→モジュールとして外部に公開する関数に対してはドキュメントという意味合いで付けた方がよいのではないか。逆に where節の中などでは型推論に任せてしまう。

型推論に任せると、Num 制約程度とされてしまう場合があり、都合が悪いなら明示的に Int などと宣言するとよい。

Scalaでは型宣言をしないと再帰の関数が書けない。(ちょっと試したら、Haskellでは型宣言なしに再帰も書けそうな気がする)

→新たな型を宣言するのが面倒なので「タプルでいいや」などとすると後で痛い目にあうので型重要

  • 関数を定義する時にガードで書いた方が if then else よりも最適化しやすい(@s_kozake)

→かもね

  • 関数定義のパターンマッチに対応してcase式があるが、関数定義のガードに相当するような「式」はないのか(@akanehara)

→ case式でもガードが書ける。こんなん

x = 10
y = case x of _
                | x < 10    -> "less than ten"
                | x == 10   -> "equal to ten"
                | otherwise -> "greater than ten"

つまり case exp of pat -> result の result にガードを挟むことができるみたいですね。キモい。