perl5.10使用時にmacportでghcをインストールするときのメモ

ghcをインストールしようとしたらperl5.8が必要らしい。 perl5.10をdeactivateしてからperl5.8をactivateしたら

$ sudo port activate perl5.8
--->  Activating perl5.8
Error: port activate failed: Image error: /opt/local/bin/corelist already
exists and does not belong to a registered port.  Unable to activate port perl5.8.

こういう場合には

$ sudo port -f activate perl5.8
$ sudo port install ghc

perlを5.10にもどす

$ sudo port deactivate perl5.8
--->  Deactivating perl5.8
$ sudo port activate perl5.10
--->  Activating perl5.10

これでOK

Haskellで継続

Haskell - WikiBookを読んでる。

継続のあたりまで進んだのだけど、動かすのに困ったのでメモ。説明は分かりやすかった。あと、Haskell-modeはミニバッファに型が出てきて便利。いちいち:tとかやって確認するの面倒だし。

import Control.Monad.Cont

foo :: Int -> Cont r String
foo n =
  callCC $ \k -> do
    let n' = n ^ 2 + 3
    when (n' > 20) $ k "over twenty"
    return (show $ n' - 4)

-- runCont (foo 5) id

そしてさらに、Haskellの継続モナド(Continuation Monad)を理解するポイントも併せて読んで吉。

wikibookはarrowのとことかも分かりやすかった。

HaskellかScalaか

うーん両方とも欲しい

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan,John Goerzen,Don Stewart
オライリージャパン / ¥ 3,990 ()
在庫あり。

ProductName Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)
Martin Odersky,Lex Spoon、Bill Venners
インプレスジャパン / ¥ 4,830 ()
在庫あり。

haskellでlivedoor clipのRSSをとってきてパースする

普段やるようなことをHaskellで書くようにすればよかろうとHaXmlhttpをつかってみた。

ほとんどhttpのテストサンプルのget.hsだけど。HaXmlのほうはHaXml の Combinators を使って XML をいじるを参考にした。

import Data.Char (intToDigit)
import Network.HTTP
import Network.URI
import System.Environment (getArgs)
import System.Exit (exitFailure)
import System.IO (hPutStrLn, stderr)
import Text.XML.HaXml
import Text.XML.HaXml.Xml2Haskell
import Text.XML.HaXml.Pretty

main = 
    do
    args <- getArgs
    case args of 
    [addr] -> case parseURI addr of
                   Nothing -> err "Could not parse URI"
                   Just uri -> do
                               cont <- get uri
                               elems <- fGetElem "test" cont
                                   mapM_ (print . content) $ (deep $ tag "title") elems 
    _ -> err "Usage: get <url>"

err :: String -> IO a
err msg = do 
      hPutStrLn stderr msg
      exitFailure

get :: URI -> IO String
get uri =
    do
    eresp <- simpleHTTP (request uri)
    resp <- handleE (err . show) eresp
    case rspCode resp of
                      (2,0,0) -> return (rspBody resp)
                      _ -> err (httpError resp)
    where
    showRspCode (a,b,c) = map intToDigit [a,b,c]
    httpError resp = showRspCode (rspCode resp) ++ " " ++ rspReason resp

request :: URI -> Request
request uri = Request{ rqURI = uri,
                       rqMethod = GET,
                       rqHeaders = [],
                       rqBody = "" }

handleE :: Monad m => (ConnError -> m a) -> Either ConnError a -> m a
handleE h (Left e) = h e
handleE _ (Right v) = return v

fGetElem fname cont = return (CElem elems)
                 where Document _ _ elems _ = xmlParse fname cont

xmlParseにファイル名入れなきゃいけないので適当に名前をいれといた。

Text.XML.HaXml.Parse

xmlParse :: String -> String -> Document To parse a whole document, xmlParse file content takes a filename (for generating error reports) and the string content of that file. A parse error causes program failure, with message to stderr.

なんか良く分からんが。

実行するとタイトルだけ抜き出すはず。

$ ./rssparse http://clip.livedoor.com/rss/clips/fmkz336
<title>fmkz336のクリップ - livedoor クリップ</title>
<title>haxml.pdf (application/pdf オブジェクト)</title>
<title>CategoryBinaries - DarcsWiki</title>
<title>PLEAC-Haskell</title>
<title>AIRアプリはドラッグ&ドロップでこんなことまで!(1/3) ─ @IT</title>
<title>Javascript でタートルグラフィックス - 言語ゲーム</title>
<title>[Haskell][30分プログラム]テトリスっぽい何か</title>
<title>ほにゃ。</title>
<title>はたしてバイオはオープンか?(Re:研究とかをオープンにすること) - バイオ研究者見習い生活 with IT</title>
<title>[REST][書きかけ][WebService][SOAP] RESTful な blast 検索サービスを作るとしたらどうするかを考えてみた</title>
<title>こういうことがしたいんだけど - 刺身☆ブーメランのはてなダイアリー</title>
<title>Version Control with SVK</title>
<title>svkでもう少し攻めてみる</title>
<title>Programming:WayToHaskeller</title>
<title>TM23Proof.pdf (application/pdf オブジェクト)</title>
<title>サーバーのリソースを定期的に取得する - Hatena::Diary::Ubuntu</title>
<title>モナドのすべて - Enjoy Programming</title>
<title>howm wiki - モナド</title>
<title>好きなフォント</title>
<title>Pexpect - a Pure Python Expect-like module</title>
<title>wxPython Cookbook - wxPyWiki</title>

HTTPのほうは読めば分かりそうなもんだけど、HaXmlはなかなか簡単なサンプルがなかったので難儀した。

計算論

丁寧に読まなきゃ駄目なかんじだけど面白そう。

900円の中古だったが、届いたブツには100円のシールが貼ってあった。

若者の夢を壊さないでー

嘘、シールつけっぱなしで評価を下げられたアマゾンの業者っているのかな?

ウロボロスやっつけた(メガテンSJ)

CHAOS Lv.46

パーティーは、破壊神トナテイウ、地母神ハリティ、邪龍キングー

ステータスは揃えとかないとキツイのと、マハンマ耐性つけたパーティを如何に用意するかだった。回復はちまちまやってもしょうがないので、宝玉輪で一気にやってあとはひたすらアギ系でcoop

ProductName 真・女神転生 STRANGE JOURNEY(ストレンジ・ジャーニー)

アトラス / ¥ 6,279 (2009-10-08)
在庫あり。

Real World Haskell 10章

Functorのあたりがついてくのがきびしくなった。

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan,John Goerzen,Don Stewart
オライリージャパン / ¥ 3,990 ()
在庫あり。

もう一度丁寧に読み直す。

HaskellのfromIntegral

fromIntegralは型を変換してNum型に

Prelude> let a = 2 :: Int
Prelude> :t a
a :: Int
Prelude> :t (fromIntegral a)
(fromIntegral a) :: (Num b) => b

Num型なので、Fractionalの和も求まる

Prelude> (fromIntegral a) + 3.0
5.0

ウロボロスが倒せない(真・女神転生 STRANGE JOURNEY)

ちょっと戦術が必要な感じ。

ProductName 真・女神転生 STRANGE JOURNEY(ストレンジ・ジャーニー)

アトラス / ¥ 6,279 (2009-10-08)
在庫あり。

力技でなくて、戦略的に攻略していくための悪魔合体が楽しい。もうすぐ30時間程のプレイ時間になる。

久々に楽しいゲームだ。年末年始の暇つぶしにもよさげ。

la table de KUDOでランチ

三島駅北口からすぐのla table de KUDOで食事。

1260612553

オマール海老と人参のムース(だったか?)とテリーヌ。

1260612541 1260612565

ホタテと牡蠣

1260612559 1260612547

メインは牛ハラミとポテト。デザートはイチゴのスープ仕立

1260612571 1260612578

満足