HaskellのReaderTを使って、IOをうまく回そうとしてみる。
Haskellで低レベルなハードウェアの処理をやっていたら、 ファイルオブジェクトを持ち回るのが嫌だなぁと思った。 そこで、Readerモナドから状態を取って来ればいいんじゃね、 というわけでReaderを使う。 ただ、IO処理なので普通のReaderではダメで、 ReaderTでやらないといけないらしい。
openSth
とreadSth
という関数が与えられたとして、
それをReaderTで扱ってみた。
(与えられた関数は、実装がテキトー)
さらにMaybeを使って、失敗時に中断させた。
main
内は、IOモナドの中にまずReaderモナドが来て、
その中にMaybeモナドが来ている。
型がかなり複雑な事になっている…。
また、モナドを積み上げる順番に注意。