日記
(このページはHaskellではIOがどのように扱われているかを手っ取り早く紹介することを目的としています。学ぶべきことすべてはお伝えできませんが、どのように動作しているかを感覚はつかめると思います。) Haskellでは、副作用は特定の型の値としてエンコードすることで考慮されなければならない、とすることで副作用がある処理と純粋な関数を切り離してきました。(IO a)型の値はアクションです。これは実行されたらaという型の値を生成しますよ、ということを表しています。 いくつか例を見てみましょう: getLine :: IO String putStrLn :: String -> IO () -- note that the result value is an empty tuple. randomRIO :: (Random a) => (a,a) -> IO a -- in pract
Haskell is a fascinating language. It is clearly an imperfect culmination of years of careful research by the languages community. There are many things I like about: currying, the functional style, the type system, etc. There are also many things I don't fully understand, mostly due to lack of experience. For a long time, one of the things I didn't understand was the monad. I read quite a few tut
Written April 17, 2013 updated: May 20, 2013 Here's a simple value: And we know how to apply a function to this value: Simple enough. Lets extend this by saying that any value can be in a context. For now you can think of a context as a box that you can put a value in: Now when you apply a function to this value, you'll get different results depending on the context. This is the idea that Functors
Google Tech Talk January 15, 2013 (more info below) Presented by Douglas Crockford ABSTRACT The wonders of monads are finally revealed without resorting to Category Theory or Haskell. It turns out that monads are trivially expressed in JavaScript, and are one of the key enablers of Ajax. Monads are amazing. They are simple things, almost trivially implemented, with enormous power to manage comp
Cross posted from msdn's channel 9. Functional programming is increasing in popularity these days given the inherent problems with shared mutable state that is rife in the imperative world. As we march on to a world of multi and many-core chipsets, software engineering must evolve to better equip software engineers with the tools to exploit the vast power of multiple core processors as it won't c
Free Monadとは さて、この「Freeモナド」について、オレオレ定義で簡単に言葉にすると。「Functorと組み合わせて様々な挙動を実現できるモナド」です。capriccioso String Creating(Object something){ return My.Expression(something); } つまるところ 要はFree Monadは、Pureな値が何かの型によってリストのように順々にくるまれた構造をもつデータ型を表していて、Listにおけるfoldのような畳み込みと同様に、Impureな部分をたどっていってPureな部分に到達するまでfmapを繰り返して処理を行いますみょんさんの もう少し圏論的な説明は じゃあこの操作を普通の関手でもできるようにしてやろうということを考えると自然とFreeモナドが構成できる。直和が定義できる圏であれば、自由モノイドを作るの
I recently presented a paper on infinite traversals at the Haskell Symposium: A totally predictable outcome: an investigation of traversals of infinite structures. The main result there is a characterization of when a call to traverse on an infinite Traversable functor (like an infinite lazy list) yields a non-bottom result. It turns out this is a condition on the Applicative one traverses with th
要約:Free モナドは何が嬉しいのかを議論するためのたたき台。以下の2つの論文に載っている例を3つの方法で実装する。 Janis Voigtlander, "Asymptotic Improvement of Computations over Free Monads" Wouter Swierstra and Thorsten Altenkirch, "Beauty in the Beast -- A Functional Semantics for the Awkward Squad" モナド 最近、僕はモナドを次のように説明するようにしている。「モナドとは言語内DSLを実装するための API (あるいはフレームワーク)」 だから、何か言語内DSLを作るなら、それをモナドのインスタンスにすべきだ。ここでは、getChar と putChar という API を持つ簡単な DSL を考
先日の Gist のリニューアルに伴って、外部サイトにコードを埋め込む際の HTML 構造が変更されたらしく、はてなブログ上に貼り付けたコードのデザインがおかしくなってしまった。 修正前: そこで、以下のような CSS を追加して修正した。 td.line_data pre { font-size: 13px; white-space: pre; box-shadow: none; } td.line_numbers { font-size: 13px; } 修正後: 行ごとの枠線を消して、行番号とコードのずれを修正。 参考にしたサイト Gist のコードの表示がおかしくなっていたので修正した - あらびき日記 - DataKinds 言語拡張のおかげで、 [String, Bool] のような型レベルのリストリテラルが扱えるようになり、 異なる型の要素を持つことができるヘテロリスト、それ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く