Unyablog.

のにれんのブログ

Haskell入門 14日目

十四日目

VBoxHeadlessTray を入れてみた。これだと一々 VM 起動してること気にしなくてよさそう。

SICP 読まないとなあとか思ってるこの頃。

Haskell, monad ぐらいまでやろうかなあとか思って目次見たけど一番最後だった。

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

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

第8章

入出力。結構難しいとか聞いたことある。

8.1

  • いい話

8.2

  • ついに ghci 以外から呼び出すようになるのか
  • コンパイルだ。。。!
    • まあ ghci からロードしてる時も呼び出してるのだけど
  • 返り値はあってアクション
  • C みたいに main がデフォで行われるみたいな感じかな

8.3

  • 急に命令形っぽくなってきた
    • main 自体がIOアクションを返す
  • getLine はIOアクションで、String を返す
    • printStrLn はIOアクション自体で、<- はそこから取ってくるみたいな感じ仮名
      • 見た感じリスト内包のアレとは違いそう。
  • do 構文自体はIOアクションを返すんかな
  • do の中で = 使ったら怒られたけどそういうもんなのか
    • let 使ったらできた。
  • haskell, 地味にインデント必要なのが難しいと思う*1
foo <-  putStrLn "hello"
putStrLn $ show $ foo == ()

としたら True と出てなるほどって感じ。

  • ghci でやっても do 内でやれって怒られた。

    • もしやと思って let 付けたら通った。
  • null 初めて見た気がする

    • Foldable を引数に取るので isEmpty みたいなもんっぽい
  • return もIOアクションなのかー

    • do 節で終わりに何もしない時とかに使う

8.4

  • それっぽい入出力群
  • 入力を反転して返すの、when 使えば
when (not $ null line) do putStrLn $ reverse line

に省略できて便利

  • forMmapM はIOアクションの結果を入れてくれる

感想

  • 一気に実用的になった感じで楽しかった。
  • なるほどいろいろ考えられてるなぁという感じ
  • これがよく聞くIOモナドかと思いながら読んでた。

*1:まあpythonもそうだけど