Seizan Shimazaki @seizans Data.ByteString.Lazy の ByteString を Data.ByteString.Char8 の ByteString に変換したり逆変換したい。(だって base64-bytestring が後者の ByteString 使ってるんだもん) 2012-09-06 12:56:18
この項目では Haskell に関連する内容に限って圏論の概観を与えることを試みる。そのために、数学的な定義に併せて Haskell コードも示す。絶対的な厳密さは求めない。そのかわり、圏論の概念とはどんなものか、どのように Haskell に関連するかの直感的な理解を読者に与えることを追求する。 3つの対象A, B, C、3つの恒等射, , と、さらに別の射, からなる単純な圏。3つめの要素(どのように射を合成するかの定義)は示していない。 本質的に、圏とは単純な集まりである。これは次の3つの要素からなる。 対象(Object)の集まり。 ふたつの対象(source objectとtarget object)をひとつに結びつける射の集まり。(これらはarrowと呼ばれることもあるが、Haskellではこれは別の意味を持つ用語なので、ここではこの用語を避けることにする。) f がソースオブ
■ [Haskell] The Typeclassopediaを訳しました The Monad.ReaderのIssue 13に掲載されたThe Typeclassopediaという記事が、Functor, Monad, Monoid, Applicative, Foldable, Traversable, Arrowといったような型クラスについて良くまとまっていて、そのあたりを知りたい時の取っ掛かりになりそうだったので翻訳してみました。 作者のBrent Yorgeyさんからも許可がいただけたので公開します。翻訳に慣れていないので変な日本語(特に専門用語の日本語訳はかなり怪しい)があったり、そもそも間違っていたりするかもしれませんので、何か見つけたらコメントを頂けると助かります。 ■ [Haskell] The Typeclassopedia by Brent Yorgey <first
λ. newtypeはHaskellの仕様に不要では? 向井さんのdataとnewtypeのちがいのわかりやすい例というエントリへの便乗なのだけど、newtypeはHaskellの仕様に不要だったのではないかと私は思っている。 向井さんの例でいうと「data T2 = T2 !Int」と「newtype T3 = T3 Int」の表す領域は全く同じである。違うのは「メモリ上のデータの表現の効率」と「パターンマッチの意味」だけ。しかし、この場合にはメモリ上のデータ表現はコンパイラによる最適化が可能であろうし、そのような最適化はプログラマにとって十分透過的*1だろうから、プログラマがメモリ上の表現を明示する意味はあまり無いはず。また、newtypeで宣言した場合のパターンマッチの意味については、dataで宣言した場合でも遅延パターンを用いれば実現できる。 仮にHaskellの仕様にnewtyp
先日Yesod勉強会第2回でHaskellでJSON Web APIを作る話しをしました。 内容的には下記のような感じです。 Web開発はクライアントサイドの技術が発達して、Web APIを作る機会が多くなった最近のフロントエンドは難しいし、分業したほうがいいっぽいYesodは独自技術&フルスタックすぎて分業辛いではscotty + persistent + aesonでJSON Web API作ろうぞなんか想像以上の相性の良さ。幸せになれそうなイキフンがビシビシ来てる発表資料はこちら。 ちなみにscottyはsinatraみたいな奴、aesonはJSONライブラリ、persistentはORマッパーです。 何しろaeson + persistentの相性がバッチリでした。発表後に@thimuraさんが見つけた じつは persistent のスキーマ定義で、テーブル名の横に js
Haskell の クイックソート としては、以下のようなコードがよく例に出てきます。 quickSortList :: [a] -> [a] quickSortList [] = [] quickSortList (x:xs) = quickSortList lt ++ [x] ++ quickSortList gt where lt = filter (<x) xs gt = filter (>=x) xs これは、小さなリストを何度も連結するので、効率が悪そうです。 そこで、一旦配列に直し、固定領域を使ってソートして、またリストに戻す方がいいのではないかと思い、実装して速度を比べてみました。配列を使うクイックソートのコードは、「珠玉のプログラミング」から拝借しました。ベンチマークも含むコードは、gist に上げています。 結果はこんな感じ(単位はms): 入力のサイズ 10^4 10
Haskell で STM を使えばデッドロックがなくなる例として、食事する哲学者の問題を考えてみる。 デッドロックするコード 食事する哲学者の問題では、箸がロックの役割を果たす。Haskell の軽量スレッド間でロックを取るには、MVar を使えばよい。以下のコードを走らせると、その内デッドロックする。 module Main where import Control.Monad import Control.Concurrent import System.Random numOfPhilosopher :: Int numOfPhilosopher = 5 type Chopstick = MVar () newChopstick :: IO Chopstick newChopstick = newMVar () getChopstick :: Chopstick -> IO ()
Rethinking Static Reference Tables in GHC - June 22, 2018 Fixing 17 space leaks in GHCi, and keeping them fixed - June 20, 2018 Hotswapping Haskell - October 17, 2017 Asynchronous Exceptions in Practice - January 24, 2017 Haskell in the Datacentre - December 8, 2016 Haskell positions at Facebook - August 24, 2016 Stack traces in GHCi, coming in GHC 8.0.1 - February 12, 2016 Fun With Haxl (Part 1)
例外の勉強会をやるので、是非にというお話を頂いて、 LOG.debug(“nice catch!”) というイベントで発表させていただきました。 当日の資料はこちらでご覧になれます。 エラー処理の抽象化 昨年末頃に社内セミナーで発表した エラー処理を書いてはいけない をもうちょっと抽象的に、あるいは具体的な話を入れて焼き直したような内容です。 今回は java-ja さんの勉強会という事で、 なにやらモヒカンとかマサカリとかが飛んでくるらしい、 とんでもないところに来てしまったとビクビクしていましたが、 この難局も何とか乗り切りました。はい。 皆さんとても真面目にソフトウェアエンジニアリングについて議論していて、楽しかったです。 僕は普段Javaでコードは書かないのですが、 Javaだと普通こうする的なのが垣間見えて、 いろいろJavaのバッドノウハウ(あるいはグッドプラクティス)が学べま
エラー処理の抽象化田中英行 <tanaka.hideyuki@gmail.com> 2012/06/26 @LOG.debug("nice catch!") 自己紹介田中英行 http://tanakh.jpTwitter: @tanakhGithub: https://github.com/tanakh Preferred Infrastracture 勤務のプログラマHaskellと、プログラミングについてあれこれ考えるのが好きHaskell入門書 すごいHaskellたのしく学ぼう! Learn You a Haskell for Great Good! の和訳 java-ja …!?とんでもないところに来てしまったぞ (((´・_・`))) ブルブル 本日のお話なぜ、エラー処理は重要なのか?なぜ、エラー処理の抽象化は重要なのか?なぜ、エラー処理の抽象化は行われて来なかったのか?
この記事は http://www.yesodweb.com/blog/2012/06/conduit-0-5 の翻訳です。 conduit-0.5 をリリースしました。 conduitはストリームデータを扱うためのライブラリです。 conduitを用いると、様々な形のデータを生成、変形、消費するような処理を、 簡単に組み合わせることができるようになります。 enumerator/iterateeパラダイムと同じ問題を解決することを目的に作られましたが、 アプローチはこれらのものとは異なります。 conduitは簡単に理解して利用できるものになることを一番の目的としています。 遅延I/Oとは異なり、リソースの即時開放を保証し、 また、純粋なコードに例外を持ち込みません。 今回のリリースでSource、Sink、Conduitのそれぞれを作るための、 シンプルで効率の良い、高レベルのインターフ
リツイート数が30を超えたので、Haskell での例外処理について説明します。僕が思うに、Haskell での例外処理が分かりにくいのには、2つ理由があります。 ライブラリの混乱 パラダイムの違い 歴史的経緯により、Prelude にも Control.OldException にも Control.Exception にも catch があります。歴史的経緯を説明するのは面倒なので、これだけ覚えて下さい。「Control.Exception だけを使って、それ以外は忘れる」 そもそも純粋関数型で catch とか言われても分からないかもしれません。Haskell では、純粋な関数と IO とでは、例外処理の方法が異なります。命令的な catch などを使うのは IO です。純粋な関数には Maybe か、Either を使います。 純粋な関数 純粋な関数では、原則として例外を投げてはい
Haskell から DX ライブラリが使えないか試してみたらあっさり出来てしまったので、みんな Haskell でゲーム作ればいいんじゃないですかみたいな日記。 1. ✲゚。.ξ(✿╹◡╹)ξノ☆.。₀:*゚✲゚*:₀。 まず、お湯を沸かします。 2. ✲゚。.ξ(✿╹◡╹)ξノ☆.。₀:*゚✲゚*:₀。 おもむろに、DX ライブラリのダイナミックリンクライブラリを取り出します。自分でソースからビルドしてもいいけどめんどいので dxlib4d あたりから拝借したらいいと思います。 http://homepage2.nifty.com/natupaji/DxLib/ http://code.google.com/p/dxlib4d/ 3. ✲゚。.ξ(✿╹◡╹)ξノ☆.。₀:*゚✲゚*:₀。 そして、pexports で def ファイルをつくります。ない場合は MinGW のサイトにあり
昨日、partake.inで、10分ぐらいでEventSourceの話をしてきました。 発表資料は一応あるのですが、それだけだと全く意味が分からないので、当日話したことをここにまとめておきます。 EventSource とは HTTP の仕組みを使って、クライアント側でリアルタイムにデータを受信するための仕組みです。 html5 の一部になっていて、 Server-sent Events に仕様が載っています。 EventSource は、技術的には単なるロングポーリングです。 つまりクライアントは HTTP を繋ぎっぱなしにすることで、レスポンスデータをリアルタイムにずっと受信し続けるという仕組みです。 普通の HTTP 通信だと、クライアントがリクエストを送信すると、サーバがレスポンスを返して終わりなのですが、EventSource はレスポンスのデータを途中までしか送信しないので、接
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く