I was thinking about this yesterday. If the point of functional code is that it is easier to reason about, should we like Monads? Consider we have an interpreter, and that we construct a sequence of commands in the free monad. Given a program like this: f = do s <- newRef writeRef s 23 writeRef s 42 readRef s Now I have deliberately not specified the implementation of the interpreter, it could be
二端子対回路網の模式図 二端子対回路(にたんしついかいろ、two-terminal pair network, two ports、四端子回路とも)は、入力端子対と出力端子対の2組の端子からなる電気回路またはデバイス。 例えばトランジスタ、フィルタ回路などがある。2端子対回路の分析は1920年代にドイツ人の数学者Franz Breisigによって研究が始められた。 概要[編集] 二端子対回路 二端子対回路は、入力と出力の電圧と電流の関係を調べるため、入力と出力の間にある回路を分離し、特有のパラメータで示すことが基本となる。このパラメータが決まると、入力と出力の間にある回路の細部を考える必要が無くなり、一つの特殊な特性を持った暗箱(ブラックボックス)にでき、回路の分析を単純化できる。暗箱に独立した出力端子がなければどんな回路もパラメータで表せ、二端子対回路に変形できる。 二端子対回路で入力と
8.7. Monads — OCaml Programming: Correct + Efficient + Beautiful ( >>= ) is a synonym for Lwt.bind , so the library does provide an infix bind operator. Now we start to see some of the great power of the monad design pattern ...
ライブラリの拡充と関数型言語のお勉強を兼ねて、モナドっぽいものを実装して見ました。 単純にモナドをOCamlで使いたいだけならMonad拡張を入れる方が手っ取り早いですが、あまり外部ライブラリへの依存性を入れたくないのと、OCamlの記法の中だけでどこまで出来るか試してみたかったので。 ちなみに誤解を避けるため先に断っておきますが、自分はHaskellerではありません。 以下ではモナドに関してHaskellをかなり参考にしていますが、Haskellのモナドに対する勘違いなどが含まれている可能性があります。 ご了承下さい。 とりあえず、インターフェースとなるシグネチャから作っていきます。 (* 型付きモナドのシグネチャ *) module type TypedMonadType = sig type 'a t val empty : 'a t val singleton : 'a -> '
2010-10-07 ProofCafe/ProofGeneral 2010-09-02 ocaml-nagoya 2010-05-22 ProofCafe/crush 2010-05-21 Fsharp 2010-05-19 ProofCafe 2010-04-25 ProofCafe01 ProofCafe/Coq01 2010-04-22 論文読み会 2010-04-16 ネタ記録庫/OCaml 2010-04-06 ProofCafe/Coq02 2009-12-15 発表資料 2009-12-08 活動記録/20080529 2009-08-10 starterkit 2009-08-01 活動記録/20080331 RecentDeleted OCamlテクニック/daemon 2009-06-05 活動記録/第11回 2009-03-25 活動記録/20080418 活動記録
最近やったことのまとめ。 CPSのモナド変換子 fumieval.hatenablog.com で作ったmtl-cの塵を払い、Hackageにリリースした。 StateTやWriterTは中でタプルを作ったり壊したりしているが、CPS変換するとそれがなくなり、しかも(>>=)も最適化されるためそれなりのパフォーマンスの向上が期待できる。モナドガチユーザにおすすめだ。 補足 GHC 7.10.1現在、StateTに関しては最適化がうまく効くらしく、Lazy、Strict、CPS版のパフォーマンスはほぼ同じだった。一方、CPS版WriterTは正格にしているためか、Strictの4倍、Lazyの8倍の速度を発揮した。なお、CPS版はベースのモナドが重いときには特に効果的に働く。 後悔なく具現化できるモナド monad-skeletonというパッケージを公開した。インターフェイスとしては普通のO
01:23 04/07/30 Windows Microsoftの人のLonghornの話を聴いていて、 Monad Shell の Commandlet を操るには文字ベースのシェルに拘る必要はなくて、 ストレートに GUI 化できるんじゃないかという気がしてきました。公開されたら ME (Monad Explorer) 作ってみようっと。 Windows → 訳 Windows (2000以降?) で [Alt]を押しながらテンキーの 1, 2, 6 を順に押してAltを離すと、 '~' が入力されます。 D言語 FAQ うわ、初耳。1バイト文字の文字コードを直接打ち込めるみたいですね。 訳 → 本 [cppll:11018] <fyi> The Design and Evolution of C++ 原著を読もう読もうと思いつつまだ買っていなかったのですけど、 翻訳が始まったらしい。
Two weeks ago, I briefly introduced a way of representing Assembly Language in Haskell code, in order to illustrate the programming paradigm to which it belongs. In a move that is sure to scare off both high-level and low-level programmers, I shall now explain how a Monad implementing 6502 Assembly can be created. In real code, this would use more abstract or efficient types, but in this article I
※これはHaskell Advent Calendar 2012の12/12分の記事です。 こんにちわ、Perlのプログラマの@hirataraです。関数型言語はまともに使ったことがないので、命令型言語の話を書きます。 Haskellでのふつうの"関数" Haskellは純粋関数型言語なので、例えば、add1 :: Int -> Intのような型の関数で副作用を発生することはできません。ここでいう副作用とは、ログを出力したりネットワークにアクセスしたりといったoutputだけではなく、ファイルを読み込んだり環境変数を参照するといったinputも含みます。add1は数学の関数と同じように振る舞います。もっときつい言い方をすれば、add1は単なる辞書(Dictionary or Map or HashTable, etc.)のように、キーに対して決まった値を返すような働きしかしません。(ただし
モナドのすべての継続モナドのところが簡潔で、概念とかもあまり明示的に説明してなくて理解に苦労したので、ポイントをメモ。誤りなど、乞うご指摘。 newtype Cont r a = Cont { runCont :: ((a -> r) -> r) } instance Monad (Cont r) where return a = Cont $ \k -> k a (Cont c) >>= f = Cont $ \k -> c (\a -> runCont (f a) k) 概要的なこと 継続といいつつ、Contが表すのは継続というより、CPSな関数。*1 CPSな関数は、引数に関数をとり、自分の仕事の最後でその関数(継続)を呼ぶ。 CPSな関数に、継続として別のCPSな関数を渡す、その別のCPSな関数に継続としてさらに別のCPSな関数を渡す、…の連鎖(CPSな関数のネスト)が、全体として
Published on June 11, 2014 This article starts a series in which I am going to publish my thoughts on and experience with different «extensible effects» approaches. This one in particular will explain the problem with the classic mtl approach that motivates us to explore extensible effects in the first place. How transformer stacks are born Often we start with a single monad — perhaps Reader or St
Lately I've found monads to be more and more useful in several programming projects. For example, Harlan's type inferencer uses a monad to keep track of what variables have been unified with each other, among other things. It took me a while to really grok monads. One reason is that many of the tutorials I've seen start out with category theory and the monad laws. These things don't strike me as a
予は如何にしてMonadophobiaを克服しつつあるか Monadについて実は数日前にようやく理解しはじめた。思えば10年前に最初にそれが函手(functor)だって教えてくれれば、少なくとも簡単なイメージ形成と基礎的な使い方はすぐに理解できたのに、と思う。HaskellのMonadを理解するために圏論を理解する必要はありません、ってのは本当かもしれないが、函手だって言われれば直観的にはすぐに理解できる。要は fmap はHaskellの函数全体が作る圏からその部分圏への函手です、fmapで函数の構造を保存したまま部分圏の函数が得られますよ、というか函手の条件を満たすようなfmapを提供することによってそういう構造保存的な部分圏を提供するんですよ、というだけのことである。ところが、部分圏の射自体がHaskellの圏の射だから、当の函手が自分自身に適用されてm (m a)のようにMonad
モナドって結局何なのよ?¶ Haskell を勉強しようとすると必ず「モナド」ってのが出てきます。困ったものです。数学とか圏論とか関係があるらしくって、何が書いてあるんだか分からなくって嫌になってしまいます。でもね、Haskell って凄いらしいじゃないですか、格好良いらしいじゃないですか。ここはちょっとがんばって色々考えてみましょう。 そもそも Haskell って何なのよ?¶ 何なんでしょうね、Haskell って。コンピュータ言語らしいんです、あ、それは分かってると。良く挙げられる性質は次な感じ?: 関数型言語 強い型付け 遅延評価 参照透過 ここでちょっと型に関して見てみましょう。試しに Haskell の実装の 1 つである Hugs で 1 について考えてみます。Hugs では :type や :info というコマンドで hugs に型の情報などを質問することができます。例え
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く