[過去ログ]
関数型プログラミング言語Haskell Part7 (1001レス)
関数型プログラミング言語Haskell Part7 http://echo.5ch.net/test/read.cgi/tech/1174211797/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
55: デフォルトの名無しさん [sage] 2007/04/01(日) 06:34:10 HaskellでRSSを引っ張って最新の数件表示するだけのサンプルに挑戦してるけど かれこれ1ヶ月以上掛かってる。w XML操作 → HXTでArrowの基礎から挑戦 日付のパース → MissingHを利用 表示 → 今はCGIライブラリで妥協してるけど本当はHAppS使いたい 難しすぎるわ。('A`) http://echo.5ch.net/test/read.cgi/tech/1174211797/55
61: デフォルトの名無しさん [sage] 2007/04/01(日) 11:10:13 >>55 で、最後に日本語の扱いで泥沼になりそうだな http://echo.5ch.net/test/read.cgi/tech/1174211797/61
183: 55 [sage] 2007/04/02(月) 12:48:42 とりあえずできてるところまで晒してみる。('A`) runXを1回済むようにできないか考えてるところ。 (実行にはHTTP, HXT, hslogger, FilePath, MissingHあたりが必要。) import Data.List (sortBy) import System.Locale (defaultTimeLocale) import System.Time (CalendarTime) import System.Time.ParseDate (parseCalendarTime) import Text.XML.HXT.Arrow data RssItem = RssItem { title :: String, link :: String, description :: String, pubDate :: CalendarTime } deriving (Show) instance Eq RssItem where a == b = (pubDate a) == (pubDate b) instance Ord RssItem where compare a b = compare (pubDate a) (pubDate b) main :: IO () main = getRssItems "http://www.microsoft.com/japan/msdn/rss.xml" >>= writeHtml "result.html" . take 10 . sortBy (\a b -> compare b a) http://echo.5ch.net/test/read.cgi/tech/1174211797/183
184: 55 [sage] 2007/04/02(月) 12:49:51 getRssItems :: String -> IO [RssItem] getRssItems url = runX $ readDocument [(a_validate, v_0)] url >>> getXPathTrees "/rss/channel/item" >>> ( getElemText "title" &&& getElemText "link" &&& getElemText "description" &&& getElemText "pubDate" ) >>^ \(t, (l, (d, p))) -> RssItem t l d (parseDate p) where getElemText n = getChildren >>> isElem >>> hasName n >>> getChildren >>> isText >>> getText parseDate :: String -> CalendarTime parseDate = maybe dummyTime id . parseCalendarTime defaultTimeLocale "%a, %d %b %Y %H:%M:%S %Z" dummyTime :: CalendarTime dummyTime = let Just d = parseCalendarTime defaultTimeLocale "%Y/%m/%d" "1900/01/01" in d writeHtml :: FilePath -> [RssItem] -> IO () writeHtml path items = do runX $ makeHtml items >>> writeDocument [(a_output_html, v_1), (a_output_encoding, utf8)] path return () http://echo.5ch.net/test/read.cgi/tech/1174211797/184
185: 55 [sage] 2007/04/02(月) 12:50:36 makeHtml :: (ArrowXml a) => [RssItem] -> a n XmlTree makeHtml items = root [] [ selem "html" [selem "body" $ arr (map makeLink) items] ] makeLink :: (ArrowXml a) => RssItem -> a n XmlTree makeLink item = selem "div" [ mkelem "a" [sattr "href" (link item), sattr "target" "_blank"] [txt (title item)] ] 以上、連投スマソ。 http://echo.5ch.net/test/read.cgi/tech/1174211797/185
189: 55 [sage] 2007/04/02(月) 13:52:13 >>187 読みと書きでArrowを別々にしてるところ。('A`) あとは元ネタはこのへんなんだけど、 http://pc11.2ch.net/test/read.cgi/tech/1174574352/15-18n これぐらい簡潔に書けないものかなあ、と。 http://echo.5ch.net/test/read.cgi/tech/1174211797/189
196: 55 [sage] 2007/04/02(月) 15:07:37 >>191 うは、ありがと。 もう少し探ってみる。('A`) http://echo.5ch.net/test/read.cgi/tech/1174211797/196
198: 55 [sage] 2007/04/02(月) 17:53:37 >>191 listAとarrLの組み合わせで、Arrow内でのsort, takeが無事できますた。多謝。('A`) http://echo.5ch.net/test/read.cgi/tech/1174211797/198
206: 55 [sage] 2007/04/03(火) 10:29:34 >>204 並べ替えのことばかり考えてて、すっかり本来の用途を忘れてた。 linkで比較に変更します。 >>205 本格的すぎ・・・。('A`) とりあえず解読に挑戦してみます。 お二方、レスサンクス。 http://echo.5ch.net/test/read.cgi/tech/1174211797/206
207: 55 [sage] 2007/04/03(火) 10:32:16 > linkで比較 linkとpubDateの方がいいか・・・。 http://echo.5ch.net/test/read.cgi/tech/1174211797/207
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.029s