読者です 読者をやめる 読者になる 読者になる

by shigemk2

当面は技術的なことしか書かない

第2期 第12回 H本読書会 in 秋葉原 #readhbon

勉強会 Haskell

readhbon.doorkeeper.jp

第8章

不純なものと純粋なものを分離する

ここにきてHello, World

Hello, World

main = putStrLn "hello, world"

I/O アクションどうしをまとめる

gist.github.com

いくつかの便利な I/O 関数

  • putStr
  • putChar
  • print
  • sequence
  • mapM
  • forever
  • forM

第9章 もっと入力、もっと出力

9.1 ファイルとストリーム

入力のリダイレクト 多くの対話型プログラム

gist.github.com

入力ストリームから文字列を得る

  • getLineのかわりにgetContentsを使う
  • 遅延 I/O → 遅延評価
  • 必要なときに必要な読み込みしかしないから、foreverが要らない

大文字変換

gist.github.com

10文字以下の行のみ表示

gist.github.com

入力を変換する

10文字以下の行のやつの別形態

gist.github.com

回文

gist.github.com

9.2 ファイルの読み書き

ファイルを読み込んで書き出すだけの簡単なやつ

  • 初登場opneFile
  • 返ってくるものはただのファイルハンドル
  • FilePath は単なる String の型シノニム
  • hGetContentsも遅延評価なのでデカイファイルが来てもメモリを食いつぶさない
openFile :: FilePath -> IOMode -> IO Handle
type FilePath = String
data IOMode = ReadMode | WriteMode | AppendMode | ReadWriteMode

gist.github.com

withFile 関数を使う

withFile :: FilePath -> IOMode -> (Handle -> IO a) -> IO a

なんかいろいろやってくれる感じ。

ファイルのパスと IOMode 、それに「ハンドルを受け取って I/Oアクションを返す関数」を受け取り、「そのファイルを開いてから何かして閉じる」という I/O アクションを返します。さらに withFile は、ファイルの操作中に何かおかしなことが起こった場合にもファイルのハンドルを確実に閉じてくれます。ややこしく見えるかもしれませんが、実際はとてもシンプルな関数です。特にラムダ式と一緒に使うと便利。

gist.github.com

ブラケットの時間

bracket :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c

ハンドルを握れ!

  • readFile
  • writeFile
  • appendFile

readFileだとすっきりするよね

なお、contentsに格納されるのは文字列なので、ファイルを開いたら開きっぱなしになる可能性があるのかな?いい感じでファイルを閉じてくれそうだけど、サーバプログラムとかでは使いづらいかも。 gist.github.com

writeFileを使う

gist.github.com

9.3 ToDoリスト

appendFileを使ってみよう。一連のdoのなかだとぶつかると思う。

gist.github.com

アイテムの削除

(急にながくなってくる)

gist.github.com

(例外対応)

gist.github.com

9.4 コマンドライン引数

コマンドラインを取り扱う。 gist.github.com

地獄少女イラストレーションズ 鏡花水月

地獄少女イラストレーションズ 鏡花水月

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!