RWH 24.2はなんかいろいろハマったのでメモ。まずzlibとreadlineのパッケージをmacbookにインストール。
perlのcpanに対応するコマンドはhaskellではcabalというものがある。
Cabal は Haskell のパッケージ管理システムです。枠組みとしての Cabal と、コマンドの cabal があり、間違いやすいです。
間違ってた。
zlibをcabalでインストール
sudo cabal install zlib
続いてreadlineを。
sudo port install readline
で
sudo cabal install readline
readlineが見つからないというエラー。仕方ないのでアーカイブをダウンロードしてきて
runhaskell Setup.hs configure \
--configure-option=--with-readline-includes="/opt/local/include" \
--configure-option=--with-readline-libraries="/opt/local/lib"
runhaskell Setup.hs build
sudo runhaskell Setup.hs install
で入れた。でもcabal に--configure-option渡してもOKな感じはする。
コードもControl.ExceptionではなくてControl.OldExceptionをインポートする。
import Control.Concurrent (forkIO)
import Control.OldException (handle)
import Control.Monad (forever)
import qualified Data.ByteString.Lazy as L
import System.Console.Readline (readline)
import Codec.Compression.GZip (compress)
main = do
maybeLine <- readline "Enter a file to compress> "
case maybeLine of
Nothing -> return ()
Just "" -> return ()
Just name -> do
handle print $ do
content <- L.readFile name
forkIO (compressFile name content)
return ()
main
where compressFile path = L.writeFile (path ++ ".gz") . compress
で、コンパイル
ghc --make Compressor.hs
これが動かなくて悩んだ。というかコンパイルできるんだけど、圧縮ファイルが作成されない。
なんでかなー?とReal World Haskellのコメント見てたら、-threadオプションが必要とのこと。
ghc --make -threaded Compressor.hs
で無事に動いた。
Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan,John Goerzen,Don Stewart
オライリージャパン / ¥ 3,990 ()
在庫あり。
Bryan O'Sullivan,John Goerzen,Don Stewart
オライリージャパン / ¥ 3,990 ()
在庫あり。
追記 101012
cabal install readline --configure-option=--with-readline-includes="/opt/local/include" \
--configure-option=--with-readline-libraries="/opt/local/lib"
でいけた。
でも、実行したらエラー
/Users/kzfm/.cabal/lib/readline-1.0.1.0/ghc-6.12.3/HSreadline-1.0.1.0.o: unknown symbol `_rl_basic_quote_characters'
ghc: unable to load package `readline-1.0.1.0'