タグ

haskellに関するr-westのブックマーク (183)

  • Applicative よりも Monad の方が力が強い理由 - あどけない話

    Applicative よりも Monad の方が力が強い理由を考えるためのメモ。これから議論するためのたたき台なので、そう思って読んで欲しい。 コンテナで包む return Monad とは、コンテナである。コンテナは、文脈を表す。たとえば、Maybe というコンテナは、失敗するかもしれない計算という文脈を表す。 通常の値や関数を文脈に入れるための API が return である。 return :: a -> ma コンテナ内での関数適用 <*> 以下のような型を持つ関数を考える。 f :: a -> b この関数を return を使って文脈の中に入れてやると、型は次のようになる。 return f :: m (a -> b) この関数を、コンテナ内にある値に適応するための API が (<*>) である。 (<*>) :: m (a -> b) -> m a -> m b コンテ

    Applicative よりも Monad の方が力が強い理由 - あどけない話
  • 使ってみよう Enumerator - あどけない話

    Enumerator Package - Yet Another Iteratee Tutorialは、Iteratee: 列挙ベースのI/Oよりは分かりやすいのですが、やっぱりよく分かりません。なぜなら、僕は使い方を知りたいのに、作り方が書いてあるからです。そこで、Enumerator ライブラリの使い方を簡単に紹介します。 登場人物 Iteratee 入力をもらって計算をします run_ で実行します IO モナドが指定されていれば、副作用を起こせます オートマトンと考えると分かりやすいです Iteratee 同士は (>>=) で合成できます Iteratee >>= Iteratee → Iteratee Enumerator Iteratee と ($$) で合成することにより、新たな Iteratee になります Enumerator $$ Iteratee → Iterate

    使ってみよう Enumerator - あどけない話
  • モナドのための圏論入門 - 針の上でprocessは幾つ踊れるか?

    「モナドは自己関手圏のモノイド対象にすぎない」とワドラーはいったがその事を説明したいと思います。 次のものを説明します。 対象 射 結合則 恒等射 圏 関手 自然変換 圏の基礎 圏は以下のものから構成されます 射 対象 射はソースとターゲットを結ぶ矢印とされます XがソースYがターゲットの社は次の通りに記述されます。 射の結合 の二つの射が存在した場合結合する事ができます さらに以下の公理を満たす必要があります。 恒等射 結合則 恒等射 任意の対象Xに対して射 が存在し恒等射という、さらに任意の射に対して が成り立つ。 結合則 が成り立ちこれを結合則という。 関手 圏Cと圏Gが存在したとして、 CからGに対して 対象 射 を対応させるものである。この時関手は以下の性質を保っていなけばならない。 恒等射 射の合成 自然変換 圏Cと圏Dの間に、F、Gという関手が存在し、 FからGへ移す射 が存

    モナドのための圏論入門 - 針の上でprocessは幾つ踊れるか?
    r-west
    r-west 2011/07/24
    簡潔でピンポイントで助かる。後に続くエントリも。
  • Haskellライブラリ入門 (2011年版) - あどけない話

    この記事では、基ライブラリである Prelude の関数をだいたい理解した人が、次に知るべきライブラリを紹介します。自由自在にリストを使いこなせ、正規表現がなくてもプログラミングができるんだなと実感した人を対象にしています。 この記事のテーマは、脱リストです。リストはとても柔軟ですが、リストで表現されている文字列は、メモリーをたくさん消費しますし、なにより遅いのです。実用的なプログラムを書くためには、必要に応じて適切なデータ構造を使う必要があります。 containers containersは、文字通りコンテナ型をいくつか集めたパッケージです。ハッシュの代替品やキューとして使えます。連想リストを使っているところは、すべて Data.Map などで置き換えることをお勧めします。 containers に入っているモジュールはすべて眺めましょう。そして、実装も読んでみましょう。(プログラミ

    Haskellライブラリ入門 (2011年版) - あどけない話
  • Specification for a Functional Reactive Programming language

    I am looking at messing around with creating a functional reactive framework at some point. I have read quite a lot about it and seen a few examples but I wanted to get a clear idea of what this framework would HAVE to do to be considered an FRP extension/dsl. I'm not really concerned with implementation problems or specifics etc but more as to what would be desired in a perfect world situation. W

    Specification for a Functional Reactive Programming language
  • QAで学ぶMonad - あどけない話

    この記事は、Monad でつまづいた Haskeller のための Monad 再入門です。 Monadとは何ですか? Monad とは、単なる型クラスの一つです。難しいという風評もありますが、それ以上でもそれ以下でもありません。 この型クラスのメソッドは、return と >>= です。 class Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a つまり、以下を満たす型の集合が Monad です。 m a で表現できるように一つの型変数を格納するコンテナ型 >>= と return を実装 return は新しいコンテナを作り、>>= は二つのコンテナを合成します。 Monad のインスタンスは失敗系と状態系に大別できます。以下に代表的なインスタンスを示します。 失敗系: Maybe、[] (リスト)

    QAで学ぶMonad - あどけない話
  • 正格性解析 (Strictness Analysis) - ヒビルテ(2010-12-28)

    r-west
    r-west 2010/12/30
    記事以前だけど、評価順自由なハズなところ、errorや無限ループになるのがあるとそいつを先に評価すると結果が変わるからだめ。でもそれに適用すると結局errorや無限ループになる関数に対しては先に評価してもいいよね
  • Scala Implicits: 型クラス、襲来 · eed3si9n

    2010-11-03 Debasish Ghosh さん (@debasishg) の “Scala Implicits : Type Classes Here I Come” を翻訳しました. 元記事はこちら: http://debasishg.blogspot.com/2010/06/scala-implicits-type-classes-here-i.html (翻訳の公開は人より許諾済みです) 翻訳の間違い等があれば遠慮なくご指摘ください. 先日 Twitter 上で Daniel と Scala での型クラスについて論議していると,突然このトピックに関する書きかけだった記事を発見した.これを読んでもあなたは特に目新しい事を発見するわけではないが,型クラスに基づいた思考はあなたの設計の幅に価値を与えることができると思う.この記事を書き始めたのはしばらく前に設計の直交性についての

  • 経験15年のOCaml ユーザーが Haskell を仕事で半年使ってみた - camlspotter’s blog

    今の会社に移って半年経ちました。めでたく試用期間終了です。といっても別に試用期間中に密かに首を切られるような事をしたとか、逆に試用期間が終わったからと言ってこれで定年までのうのうと働ける、という訳ではありません。未来は全く判りません。まあとにかく、一つ区切りがやってきました。 金融を知らないQuantsの仕事 私の職業の肩書きには Quantitatitatitatitative という単語がくっついて超カッコよさそう。普通は Quant というと、金融工学や統計数理に詳しい夜もブイブイいわしている超イケメン20代を想像しますが、私は金融とか全然知らないアラフォーお父さんです。それでも Quant です。お願いですから、私に何を買ったらいいかとか、聞かないでください。金融商品とか買った事ないし。というか、逆に教えて欲しいです。 私のチームは、当の Quant さん達が開発した、金融派生商

    経験15年のOCaml ユーザーが Haskell を仕事で半年使ってみた - camlspotter’s blog
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • Arrow の first が満たすべき公理が式だけだとわかりにくいので図式にしてみる。 - らむだ畑でつかまえて (catcher in the λ)

    first と pure は図式の中では関手っぽさを出すため First と Pure のように先頭大文字にしてみた。 多相なものには気分によって型を補足した。 1.[拡張] first (pure f) = pure (f×id) Hom(X,Y) で X から Y への射の集まりを表すと (-)×id_D Hom(B,C) --------------> Hom(B×D,C×D) | | | Pure | Pure ↓ ↓ Hom(B,C) --------------> Hom(B×D,C×D) First_D 上辺は通常の関数の世界、下辺は Arrow の世界。 first (pure f) = pure (f×id) で f = id とすると first (pure id) = pure (id×id) pure id も pure (id×id) も idA なので firs

    Arrow の first が満たすべき公理が式だけだとわかりにくいので図式にしてみる。 - らむだ畑でつかまえて (catcher in the λ)
    r-west
    r-west 2010/11/28
    すっかり忘れてる…。
  • 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 - 純粋関数型雑記帳
  • Haskellの「fib = 1:1:zipWith (+) fib (tail fib)」はとても遅い - 西尾泰和のはてなダイアリー

    ラボの昼休みに光成さん、中谷さんとご飯をべながら話した内容を一応ざっくりとまとめておく。 発端はたしか最近Haskellを勉強の光成さんが、Haskellのかっこいいsieveは実はとても遅い(俺は Haskell の sieve についてとんでもない思い違いをしていたようだ...)という話を見て、同様にかっこいいけど遅い下記のフィボナッチ数列の定義の速度を調べてみたら2.5乗くらいのオーダーになっていたという話だったかと思う。 fib = 1:1:zipWith (+) fib (tail fib) 僕も確認するために、コマンドライン引数でNを与えられるフィボナッチ数列のN番目を求めるコードを書いた。 import System fib = 1:1:zipWith (+) fib (tail fib) main = do args <- getArgs print $ (0 *) $

    Haskellの「fib = 1:1:zipWith (+) fib (tail fib)」はとても遅い - 西尾泰和のはてなダイアリー
    r-west
    r-west 2010/06/26
    遅延評価?その辺がまだぜんぜん感覚的につかめない。まあ性能が問題になるほど大データを使うまともなプログラム書いてないからな。/コンパイラがこういうところをもっと自動で正格化してくれないかな。情報不足?
  • The Typeclassopediaを訳しました, The Typeclassopedia - #3(2009-10-20)

    ■ [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

    r-west
    r-west 2010/05/23
    「Functor, Monad, Monoid, Applicative, Foldable, Traversable, Arrow といったような型クラス」のまとめ
  • Neil Mitchell - HLint

    HLint (formerly Dr. Haskell) reads Haskell programs and suggests changes that hopefully make them easier to read. HLint also makes it easy to disable unwanted suggestions, and to add your own custom suggestions. Running the tool over the darcs source code, we can generate an interactive report with --report, or view the results in the console: $ hlint darcs-2.1.2 CommandLine.lhs:49:1: Warning, eta

  • 遅延評価と末尾再帰と余再帰 - あどけない話

    遅延評価では再帰の効率はどうなるかという問題です。Real World Haskell で、末尾再帰は重要だと言った後に、遅延評価では末尾再帰なんて気にするなとちゃぶ台を返しています。ようやく haskell-cafeで答えを見つけたので、Luke Palmer さんの許可を得て訳を公開します。 Luke Palmer さんの説明 私が Haskell でプログラミングするときは、通常関数を末尾再帰にはしません。(Int や Bool など)正格な値へ畳み込む場合、末尾再帰を使うのはよいことです。しかし帰納的な遅延構造を作成する場合、関係する用語は(私の記憶が正しければ)「余再帰」(corecursion)であり(訳注:mapは再帰かつ余再帰だそうですが、専門的すぎるので普通の再帰でいいと思います)、末尾再帰とはまったく異なります。 リストに対し末尾再帰で map する関数を例として考えま

    遅延評価と末尾再帰と余再帰 - あどけない話
    r-west
    r-west 2009/11/24
    アキュムレータ?リストを持ち回る再帰は、リストに収める計算自体が遅延されてメモリを食うので、そんな末尾再帰ではなく、再帰計算をconsの中に入れてしまうべき……←不当に特殊化してしまってる希ガス
  • 参照透明な malloc は可能か (あるいは IO モナドについて) @ val it: α → α = fun

    This entry was posted by Jun Mukai on Friday, 6 November, 2009 alohakun が次のようなことを書いていたのが面白かったので、今日ちょっと帰宅途中につらつら考えたんだけど、twitterでつぶやくには長すぎるのでちょっと書いてみることにします。 malloc() って副作用あるの ? もちろん内部的にはあるだろうけど、外部的な振る舞いだけを見ると、有効なメモリリージョンの先頭アドレスが返ってくるだけだから、観測できないと思うんだけど。 (http://twitter.com/alohakun/status/5433639881) Haskell で乱数作るときってどうやって参照透明にしてるんだ ? 乱数を直接作る関数は無くて、シードを元に、乱数の無限リストを作るとかなのかな。ならば、確保可能アドレスの無限リストを作れば、副作

    r-west
    r-west 2009/11/06
    よくわかるIOモナドの説明。IO aは、「世界」を与えられたらa型の値と「その後の世界」を返す関数値。
  • [darcs-users] darcs patch theory

  • トランザクションメモリ(Transactional Memory) - x76789の研究メモ

    http://www.atmarkit.co.jp/news/analysis/200707/17/trans.html : トランザクションメモリはマルチコアの救世主となるのか? − @IT これに対して、1993年にMaurice Herlihy氏とJ.Eliot B. Moss氏が提案したコンセプトがトランザクションメモリ(Transactional Memory)という考え方だ。これは、基的に共有リソースに対するロックを事前に行うのではなく、各実行スレッドがそのコピーをローカルに持ち、処理終了時点で参照数値が変更されていないことの確認と、結果の書き込みを一気に行ってしまうというものだ。 仮に依存数値がほかのスレッドによって書き換えられている場合は処理そのものを廃棄してやり直す必要がある。この点、データベースのトランザクション処理と類似していることからトランザクションメモリと命名さ

    トランザクションメモリ(Transactional Memory) - x76789の研究メモ
    r-west
    r-west 2009/06/11
    投機的実行の一種。メモリ排他を回避。共有データをコピー→コピーを使って処理実施→オリジナルが変わってたらロールバックしてまたコピーしてやり直し。IntelはCPUでハード的にサポートする事も検討。
  • Stateモナドを今度こそ理解する - Pixel Pedals of Tomakomai

    3年前に理解しようとして惨敗した*1HaskellのStateモナドの解説に、リベンジしようと思います。圏論をちょっとはかじったので、今度こそまともな解説ができるはず。 と言うことで、今回は前編です。圏論の知識は前提とはしてないですが、集合と写像にアレルギーがあるときついかもしれません。 *1:3年前の敗因は、圏をSetsだと思い込んでた上に関手を「写像を写像に移す写像」だと誤解してたことでしょうか。

    Stateモナドを今度こそ理解する - Pixel Pedals of Tomakomai