Haskellに関するfaith_and_braveのブックマーク (70)

  • jaspervdj - Type-safe events

    Type-safe event-based programming in Haskell Published on October 16, 2011 under the tag haskell This is some code I wrote a while ago. It is (mostly) based upon Data Types a la Carte, a great pearl by Wouter Swierstra. It uses some ideas discussed in this paper to create a type-safe, extensible event-based framework in Haskell. This blogpost is written in Literate Haskell, meaning you should be a

  • ArrowによるHaskellプログラミングの基礎。…パイプ感覚で順次/分岐/繰返し - よくわかりません

    Programming with Arrowsを読んで理解したつもりのメモ。誤りなど乞うご指摘。 (復習)Arrowってなに? と思って以前調べたメモが"3分で解るHaskellのArrowの基メモ - よくわかりません"。それにちょっと補足というか観点を変えてまず感覚の整理。 Monadに色んな種類があるように、Arrowも色んな種類がある。 Monad: IO、Maybe、… Arrow: 関数そのまんま(->)、Kleisli m、… ある種類のMonadに色んな型の色んな値を入れられるように、ある種類のArrowに色んな型の色んな関数を入れられる。 Monad: Maybeの例→ 「Maybe Int」 にreturn 0もreturn 777もOK。「Maybe Char」 にreturn 'a'もreturn ' 'もOK。 Arrow: (->)の例→ 「Int -> In

    ArrowによるHaskellプログラミングの基礎。…パイプ感覚で順次/分岐/繰返し - よくわかりません
  • Haskell で UTF-8 メールを送信 - SMTPClient 使用 - なんとなくな Developer のメモ

    前回 id:fits:20101101 にて Scala や F# で実装したメールの送信処理を Haskell で実装してみました。 メール送信には HaskellNet を使う方法もあるようですが、今回は SMTPClient を使いました。 HaskellPlatform 2010.2.0.0 (GHC 6.10.4) SMTPClient 1.0.3 なお、メール送信処理の仕様は id:fits:20101101 と同じです。(Shift_JIS の実行時引数と標準入力を UTF-8 に変換して送信) サンプルのソースコードは http://github.com/fits/try_samples/tree/master/blog/20101106/ 事前準備 必要なパッケージを cabal コマンドでインストールします。 > cabal install hsemail > caba

    Haskell で UTF-8 メールを送信 - SMTPClient 使用 - なんとなくな Developer のメモ
  • Fun with monad comprehensions « blog.n-sch.de

    The idea I’m currently working on a new GHC extension called monad comprehensions. Monad comprehension is a generalization for list comprehensions, as you know them from standard Haskell98 / Haskell2010: > l :: [(Int,Int)] > l = [ (x,y) | x <- [1..3], y <- [1..x], odd x ] *Main> l [(1,1),(3,1),(3,2),(3,3)] And as you may or may not know, you can rewrite this using the list monad: > l_monad :: [(In

  • 最適化コンパイラ屋がHaskellの副作用について考えてみる - ブートストラッピングでコンパイラを作る日記

    Haskellに副作用があるのか?というのは難しいテーマだと思いますが、少なくとも最適化理論での一般的な「副作用」の定義ではHaskellは全く副作用がない言語と言えると思います。 理論的に美しいという点がHaskellの設計の一番重要なところだと思うのですが、バックエンドの泥臭い話も面白いかもと思ったので書いてみます。 私は主に手続き型言語の最適化をやっていて関数型言語は詳しくありませんので、見当違いな事を書いていたら指摘して下さい。 まずは副作用の定義の為に「データ依存関係」(Wikipedia:依存関係)の説明をします。 ある変数xを使用・定義する二つの文を考える時、その評価順序関係には以下の4種類があり、それぞれの関係を以下のように呼びます。 真の依存 x = ... ... ... = x 逆依存 ... = x ... x = ... 出力依存 x = ... ... x =

    最適化コンパイラ屋がHaskellの副作用について考えてみる - ブートストラッピングでコンパイラを作る日記
  • = Haskellの演算子一覧 - @peccul is peccu

    [2010-10-26 21:44:58] >>>[haskell] Haskellの演算子一覧表無いか聞かれたから探してみた Haskell Operators and other Lexical Notation(pdf) こんなに記号あったら大変よな. あと,この表には抜けてるけど,$演算子は関数の結合ですので. f1(f2(f3(arg))) を f1 $ f2 $ f3 $ arg と書けてしまう'$'演算子 http://blog.livedoor.jp/kikwai/archives/51588251.html その点Elispならほとんど()であと,'#[]くらいかな.読む分にはほとんど困らんし

    = Haskellの演算子一覧 - @peccul is peccu
  • Haskellの遅延I/Oによる問題を解決する。 - このブログは証明できない。

    Haskellで。あるファイルから内容を読み込んで、加工して、同じファイルに上書きしたいとき。readFileで読み込んで、writeFileで書き込もうとしたとき。ファイルにロックがかかっていて、書き込みできません。というのも、readFileしても実際には内容が読み込まれず、内容を評価するときにはじめて読み込まれるんですね。遅延です。I/Oも遅延するんですね。全国遅延です。 main = do text <- readFile "foo.txt" writeFile "foot.txt" text しかたがないので、readFileの代わりにopenFileを使って、クローズのタイミングを制御します。 main = do text <- bracket (openFile "foo.txt" ReadMode) hClose hGetContents writeFile "foo.tx

  • Lazy I/O must go! - Iteratee: 列挙ベースのI/O - 純粋関数型雑記帳

    最近ちょっと気になるiterateeを勉強したので、日語の解説を書いてみます。と言いつつ、大部分が The Monad.Reader Issue 16 *1 からの引用です。 はじめに Iterateeと呼ばれる新たなI/Oの抽象化手法が、最近にわかに広まりつつあります。既存のI/Oが抱える問題を解決するべくOleg Kiselyovによって2008年頃に提唱されたiterateeは、新しい高性能webフレームワークsnap *2 や、hyena *3 で利用されています。また、HackagDB上にて、iterateeパッケージ*4、およびiterateeを利用できる様々なパッケージ *5 *6 *7 *8 が公開されています。 しかし、ドキュメントの少なさなどからiterateeがどういうものなのかよく分からないという人も多いようです。そういうわけなので、iterateeを易しく解説し

    Lazy I/O must go! - Iteratee: 列挙ベースのI/O - 純粋関数型雑記帳
  • 高階関数パズルの解説 - camlspotter’s blog

    前回の日記でこのような問題を出しました: 問題 次の twice 関数は、第一引数である関数 f を第二引数 x に二回適用する高階関数です。 let twice f x = f (f x) この時、次の各式の結果は以下のようになります: 式 ==> 結果 twice ((+) 1) 0 ==> 2 twice twice ((+) 1) 0 ==> 4 twice twice twice ((+) 1) 0 ==> 16 では、 twice twice twice twice ((+) 1) 0 の返す値は何ですか?まず、実際にプログラムを走らせずに、考えてみてください。 これは Python Hack-a-thon #4 で OCaml の紹介をしているときに高階関数の話をしている時に、ちょっと出してみた物です。解答も何も言わずに、暇だったらやってみてね、って感じで紹介しただけでしたの

    高階関数パズルの解説 - camlspotter’s blog
  • モナドの初歩 - 再帰の反復blog

    リスト フィリップ・ワドラー(Philip Wadler)は 「How to replace failure by a list of successes: a method for exception handling, backtracking, and pattern matching in lazy functional languages」(1985)で、失敗やバックトラックの可能性がある場合に結果をリストにして返すようにするというテクニックを紹介している。 すべての答えを探索してリストにして返す関数を呼び出しても、遅延評価言語ならば、実際にすべての答えを探索するわけではなく、必要に応じて必要なだけの答えを計算する。そのためリストを返す関数をバックトラック機構の代わりに使うことができるというのがこのテクニックのポイントになる(もちろんバックトラックが使われる全ての場合に適用できる

    モナドの初歩 - 再帰の反復blog
  • Haskell features I’d like to see in other languages

    When I read Ben Hutchison‘s OO/Imperative programmers: ‘Study Functional Programming or Be Ignorant’ I knew I had too much to say for the comments, so I figured I’d put in my 2 cents here. Haskell is my go-to language, both for scripting, and for getting work done. This is not because of any particular allegiance to the language. Haskell and I have an open relationship, and the moment I find a lan

    Haskell features I’d like to see in other languages
  • Haskell API Design: Scoped Resources

  • Haskellでメール送信 - ログ日記

    Google グループ メールは HaskellNet を使うといいよ、と書かれている。 Author Jun Mukai って入門Haskellの著者かな? cabal install iconv --global cabal install HaskellNet --globalソースをDLしてきて example/smtp.hs の通りにすれば英語のメールは送信できた。 しかし日語が…。 Text.Mime.showMessage はFromやToをMimeエンコードしてくれるのだが、値の全てをエンコードするようになっている。 To: =?ISO-2022-JP?b?〜〜〜?= <user@example.com>こうなってほしいところだが To: =?ISO-2022-JP?b?〜〜〜〜メールアドレスもここ〜〜〜?=こういう動作になっている。 この動作だとメールサーバがホスト名を

    Haskellでメール送信 - ログ日記
  • STはState Transformerとは言うけれど - 取り急ぎブログです

    少し前に巷ではやったSTのことを勉強してみました。原典のLazy Functional State Threadsをかじってみました。 僕はStateモナドはなんとなく自分でかけるくらいまで理解していたのですが、STは使ったこともないし、いったい何物なんだかぜんぜん知りませんでした。 Stateモナドは要するに関数なわけで State s a = State \s -> (a, s) ということはStateモナド系のKleisli関数がバインドされる図は乱暴な見方をすればこうゆう絵柄になるわけです。 runState (\s -> (a, s') >>= \a s -> (b, s') >>= \b s -> (c, s')) 何をスケッチしてるんだかよくわからなくなっちゃうんですがここではそれぞれのKleisli関数をそのシグネチャだけで書いています。それぞれのKleisli関数は(Kl

    STはState Transformerとは言うけれど - 取り急ぎブログです
  • d.y.d. DanoMoi と Haskell

    17:24 06/09/27 XP theme 昨日 OSXP というビジュアルスタイルを知りました。 完全にMacOS化してない辺りがかなり好みです。しばらく使ってみよう。 ただ日語のせいかスタートメニュー周りがずれるので、TClockで調整したりユーザーの 表示名をスタイルに合わせて変えたりと適当に酷い合わせ方をしてます。 マジメに直そうよ>自分。 LCSD LCSD '06 (Library-Centric Software Design) のプログラムが出てました。 "ライブラリ" そのものを対象にしてその設計や実装について議論する学会…ということで 特に言語について限定されてはいません。が、実際中身を覗いてみると、 基調講演や Program commitee の面々の名前を見る人が見ればすぐわかるように、 えらく濃いC++使いが集結する感じの学会です。 (や、必ずしも皆が皆C

  • ヒビルテ(2009-07-05)

    λ. “Referential transparency, definiteness and unfoldability” by Harald Søndergaard and Peter Sestoft Chatonのhaskell-jpルームで2009-07-03と2009-07-04にあった、参照透明性と副作用の定義に関わる話で出てきた論文。積読論文の中にあったので読んでみた。 参照透明性(referential transparency)はQuineによって考えられた概念で、LandinとStracheyによってプログラミング言語の性質として使われるようになった。が、その定義・使われ方は変化しており、それらは同値ではないという話。 それらを、この論文での呼び方で呼ぶと以下のような感じ。 確定性 (definiteness) 変数がそのスコープの中で単一の値を持つこと。xを変数とすると

  • Haskell のたった一つ、確実に優れているところ - camlspotter’s blog

    それは、 偉大なるジョン・ハロップ師が既に去られた言語 その事に尽きる。師が興味を持たれた言語コミュニティーは荒れる。何故かは判らない。乱あるところすべからく師あり。師の去るところ平和あり。そう、Haskell は既に解放されたのだ。 OCaml も数年前は大いに荒れていたが、師が F#界にその活動拠点を移されてからは少し落ち着いてきた感がある。その分、F#界では今下克上の時代なのであろう。もちろん、今でも時々 「OCamlは F# の8倍遅い(8 core マシン上で)」という波が立つ事もあるが、そんな時には、師の息遣いを感じる事ができる。まだOCaml界には平和は訪れていないと感じる時だ。 Haskell は平和だと書いたが、やはり世の常である。全く平穏と言うわけでもない。時々愚かな若者が愚かな質問をする: It is a wonderful, very fast, mature an

  • Photo Tourism: Microsoft Research, Interactive Visual Media Group

    Photo Tourism: Microsoft Research, Interactive Visual Media Group
  • 【Haskell】Programming in Haskell #10 トートロジー » 宵のうちから

    Programming in Haskellの第10章ぐらいで出てくるトートロジーチェッカーで遊ぶ。 トートロジーというのは必ず真になる命題のことだね。 トートロジーの例 私は私である。 A→A 私であるか私でないか。 A∨¬A 形式論理学のによると、定義は 出力がfになるような組が真理値表に存在しない ということらしいので、ようするに必ず真になる論理関数ということ。 データ型を用意する。 data Prop = Const Bool | Var Char | Not Prop | And Prop Prop | Or Prop Prop | Imply Prop Prop 変数と∧、∨、¬、→の5つを準備する、これによって例えば次のような文が作れる。 p1 :: Prop p1 = And (Var 'A') (Not (Var 'A')) p2 :: Prop p2 = Imp

  • Wadler: Monads

    Monads, Arrows, and Idioms Philip Wadler The arrow calculus Sam Lindley, Philip Wadler, and Jeremy Yalloop, Journal of Functional Programming 20(1):51&em;69, 2010. We introduce the arrow calculus, a metalanguage for manipulating Hughes’s arrows with close relations both to Moggi’s metalanguage for monads and to Paterson’s arrow notation. Arrows are classically defined by extending lambda calculus

    faith_and_brave
    faith_and_brave 2010/01/31
    「Monads for functional programming」 State Monadの説明