第1回です。教材はこちら。
[第1回の様子]
2023/09/06に第1回を開催した。
参加者は自分を入れて16人。初回だからか、どこからか開催の噂を聞きつけたメンバーが集まったらしい。Rust dojoの時もそういえば最初は16人いた。最終的にRust dojoは5人前後に落ち着いて終わったけど、Haskell dojoは何人残るかな...。
ちなみにRust dojoの初回と今回の記事のタイトルが微妙に違うのは、会の主催が自分ではないから。Rust dojoに参加してくれていたHaskell好きの同僚が勉強会の枠を引き取って、Haskell dojoを開催してくれている。
Haskellそのものはここ10年ほどアップデートがないらしく、2015年に書かれたウォークスルーHaskellというサイトで学んでいくことに。
ローカル環境は用意せず、必要に応じてプレイグラウンド上でコードを動かしていく。
[学んだこと]
- 今週はHaskell についてを学んだ
- 1. Haskell とは
- 2. Haskell の特徴
- 2.1. 純粋関数型言語
- 関数:同じ引数にいつも同じ値を返す(参照透過性)。
- 純粋=参照透過性+副作用なし
- リストを2乗する処理
- map (\x -> x * x) [1, 2, 3, 4, 5]
- 2.2. モナド
main = do putStr "あなたの名前: " name <- getLine let greeting = "こんにちは," ++ name ++ "さん." putStrLn greeting
- 2.3. 強力な型システム
append :: [a] -> [a] -> [a] append x y = x ++ y main :: IO () main = print $ append "Hello" "World" // HelloWorldと出力される
-
- スペースを入れたい場合こんな感じ
append :: [a] -> [a] -> [a] append x y = x ++ y main :: IO () main = print $ append (append "Hello" " ") "World" // Hello Worldと出力される
- 2.4. 型クラス
- データ型をカテゴライズする役割を持つ
- Javaでいうインターフェース的な感じ
- Num型クラスがあって、Int、Double、Floatなどのデータ型が属する
- 2.5. 遅延評価
- 式の評価はできるだけ先延ばしにする
- 評価する必要のない式は評価しない
- 計算の効率化+無限長のデータ
- take 5 [1..]で無限長のリストに関数を適用し、先頭5要素を取り出す
- print [1..]とかやってしまうと無限長リストを出力しようとしてハングする
- 3. Haskell の仕様
- 4. Haskell の実装
- 5. 関連サイト
- やさしい、とか、gentleとかは殺しにくるので注意、とのこと。
- 第2章は開発環境についてなので、今回はスキップ。
- 上で引用した記事を参照のこと。
[まとめ]
とりあえずモナドが大事そうなのはわかった。