fugafuga.write

日々のログ

すごいH本 part68

bytestring を使ったファイルコピー

ファイルコピー関数を実装する

import System.Environment
import System.Directory
import System.IO
import Control.Exception
import qualified Data.ByteString.Lazy as B

main = do
    (fileName1:fileName2:_) <- getArgs
    copy fileName1 fileName2

copy source dest = do
    contents <- B.readFile source
    bracketOnError
        (openTempFile "." "temp")
        (\(tempName, tempHandle) -> do
            hClose tempHandle
            removeFile tempName)
        (\(tempName, tempHandle) -> do
            B.hPutStr tempHandle contents
            hClose tempHandle
            renameFile tempName dest)

テスト用ファイル

bart.txt

abcdefghijklmnopqrstuvvvvvvv

実行する

> stack ghc -- --make bytestringcopy.hs
[1 of 1] Compiling Main             ( bytestringcopy.hs, bytestringcopy.o )
Linking bytestringcopy ...
> ./bytestringcopy bart.txt bort.txt
> cat bort.txt
abcdefghijklmnopqrstuvvvvvvv
> cat bart.txt
abcdefghijklmnopqrstuvvvvvvv

文字列を使ったプログラムを作成する場合、bytestring を使ったものに 書き換えるには多くの場合、修飾付きインポートして対応する関数の前に モジュール名を付け足すだけでいける。

文字列操作でもしパフォーマンスを上げる必要があるなら、 bytestring を試す価値がある。

所感

copy は独自で定義した関数なのに、型宣言が無かったので一瞬よくわからなかった。 基本的に書いていただきたい。

世間は羽生フィーバーである。

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

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

  • 作者: MiranLipovaca
  • 出版社/メーカー: オーム社
  • 発売日: 2017/07/14
  • メディア: Kindle版
  • 購入: 4人 クリック: 9回
  • この商品を含むブログを見る