2012-01-27
■[Haskell] Conduitのトリビアルでシンプルなサンプル
Haskellの新しいIOライブラリのトリビアルなサンプルを書きました。
Conduitとは、水道管とか溝とか言う意味です。
この例は読み込みと書き込みのファイルを開いて10文字だけコピーするだけのサンプルです
do構文で組み立てられたResourceTモナドをrunResourceで実行とモナド変換を行います
このdo構文の中は大まかに分けて3つとなります。
リーソスの確保
(srcKey, rHandle) <- with (openFile src $ ReadMode) $ hClose
withを使ってリソースを確保します。
それぞれコンストラクタとデストラクタのようなものです。
withの返り値はタプルとなっています。このタプルの一番目がキーとなっており開放のために使います。二番目はハンドルとなっており、パイプ処理の時にSource,Sinkに変換して使います。
with定義
withSource :: Resource m => Base m aallocate -> (a -> Base m ())free resource -> ResourceT m (ReleaseKey, a)
パイプ処理
ResourceTを組み立てる必要があります。
そのために
source -> conduit -> sink
(unixの例えでばよけばcoduitはパイプ"|")
というパイプを作り必要があります。
この例の場合
(sourceHandle rHandle) $= (isolate 10) $$ sinkHandle wHandle
該当箇所となります。
- source
sourceHandle rHandle
sourceHandle定義
sourceHandle :: ResourceIO m => Handle -> Source m ByteString
- conduit
(isolate 10)
- sink
sinkHandle wHandle
sinkHandle定義
sinkHandle :: ResourceIO m => Handle -> Sink ByteString m ()
となります
sourceHandle, sinkHandleはそれぞれハンドルをsource、sinkに変換する関数です。
こうして作られたパイプコンビネータ($$)ResourceT組み立てます。
isolate定義
isolate :: Resource m => Int -> Conduit ByteString m ByteString
($$) 定義
($$) :: (IsSource src, Resource m) => src m a -> Sink a m b -> ResourceT m b
($=)定義
($=) :: (IsSource src, Resource m) => src m a -> Conduit a m b -> Source m b
リソース開放
release srcKey
release定義
release :: Resource m => ReleaseKey -> ResourceT m ()
トラックバック - http://d.hatena.ne.jp/oskimura/20120127/1327636241
リンク元
- 56 http://www.google.co.jp/url?sa=t&rct=j&q=船井幸雄+トンデモ&source=web&cd=1&ved=0CDMQFjAA&url=http://d.hatena.ne.jp/oskimura/20071112/1194845839&ei=JCwiT-iUM8nLrQec5OiUCA&usg=AFQjCNHIdKPlK
- 40 http://www.google.co.jp/url?sa=t&rct=j&q=Yesod&source=web&cd=2&ved=0CD0QFjAB&url=http://d.hatena.ne.jp/oskimura/20110516/1305536215&ei=hz4iT_vKIaKUiQfq-aTsBA&usg=AFQjCNGdc2FxODOOTtPpJHgpyn708rpMgQ
- 10 http://ezsch.ezweb.ne.jp/search/?sr=0002&query=船井幸雄トンデモ
- 6 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CD0QFjAB&url=http://d.hatena.ne.jp/oskimura/20110516/1305536215&ei=tFQlT-OREIWdiAfb7LntBA&usg=AFQjCNGdc2FxODOOTtPpJHgpyn708rpMgQ&sig2=IJNI-enofiTppq8PF-SCVQ
- 5 http://www.google.com/search
- 4 http://k.hatena.ne.jp/keywordblog/Haskell
- 4 http://t.co/YVNp6ma
- 4 http://www.google.co.jp/search?sourceid=navclient&aq=t&hl=ja&ie=UTF-8&rlz=1T4ADBR_jaJP235JP235&q=船井幸雄+トンデモ
- 4 http://www.google.co.jp/url?sa=t&rct=j&q=conduit haskell&source=web&cd=2&ved=0CCsQFjAB&url=http://d.hatena.ne.jp/oskimura/20120127/1327636241&ei=ShswT5HZJOuViAfK57DJDg&usg=AFQjCNEY4hlAdvBQXhdNhaefz_SHRw4p3g&sig2=9pw_LOk0mRCss8KEeXGQkg&cad=rj
- 3 http://www.bing.com/search?q=船井幸雄+トンデモ&FORM=R5FD5

