タグ

monadに関するJxckのブックマーク (36)

  • Option/Either/Future Monads in JS, Python, and More | Toptal

    This monad tutorial gives a brief explanation of monads and shows how to implement the most useful ones in five different programming languages—if you’re looking for monads in JavaScript, monads in Python, monads in Ruby, monads in Swift, and/or monads in Scala, or to compare any implementations, you’re reading the right article! Using these monads you will get rid of a series of bugs like null-po

    Option/Either/Future Monads in JS, Python, and More | Toptal
    Jxck
    Jxck 2018/10/26
  • モナドを理解するために JavaScript で例外モナドを実装してみた - Qiita

    モナドを理解するために Monads for functional programming の例題にある例外モナドを JavaScript で実装してみたのでメモっとく。 戻るボタンをクリックする前に無心で写経してみてほしい。Web ブラウザーの JavaScript コンソールで試せるようにしてあるので! ちなみに、モナドを理解するために書いたコードなので JavaScript でモナドを実用する上では役に立たないのでご注意を。 前提知識 コードを簡潔に表現するために下記のような言語仕様を活用する。 アロー関数 アロー関数を活用して関数を簡潔に表現する。 var add = (n, m) => n + m; // var add = function(n, m) { // return n + m; // }; // var mul = n => m => n * m; // var m

    モナドを理解するために JavaScript で例外モナドを実装してみた - Qiita
    Jxck
    Jxck 2017/12/13
  • Monads to Machine Code

    Monads to Machine Code Just-in-time or JIT compilation is compilation done by dynamically generating executable code. It’s a common technique used in many language runtimes to generate optimized code for hot code paths as well ahead of time compilation for various tasks. So let’s build a small LLVM-like intermediate language and JIT execution engine in Haskell. This will only function with modern

    Jxck
    Jxck 2017/04/24
  • pseudocorta: Monads, promises, arrays in Javascript

    In this article I'll try to explain what is a Monad by developing an intuition based on commonly used patterns and objects, like arrays and promises. Lets start by analyzing a familiar data type: Arrays Arrays Map Lets say we have several useful functions that operate on numbers and return also numbers as their result; for example: var square = function (i) { return i*i }, sum1 = function (i) { re

  • Practical Intro to Monads in JavaScript: Either — Evojam

    My simple and practical Intro to Monads in JS, where I covered basics of Identity and Maybe monads, seemed to be helpful for a lot of folks, so I’ve decide to continue the topic. Now it's time for Either - a tool for fast-failing, synchronous computation chains. A tool that may increase readability and quality of code while reducing error proneness. The best part is that we can still ignore the ca

    Practical Intro to Monads in JavaScript: Either — Evojam
  • bullet-scala: N+1クエリ問題を回避する - 貳佰伍拾陸夜日記

    Scala関西 Summit 2015での発表で触れていたN+1クエリ問題をなんとかするためのライブラリを公開した. 発表は以下のもので, ここでは「関係モナド」という名前で紹介していたけれど, これは口頭でも説明したように便宜上てきとーにつけた名前であって, とくにそういう名前のよく知られたモナドがあるというわけでもなければ, そもそもモナドであるかどうかはあまり質的ではない. この発表のあとに, Rails (Active Record)でのbulletのようにN+1問題の検出をScalaでやる方法はないだろうか, と言っている人がいたので, そういうものを探していて辿りつけるとよかろうということで, bullet-scalaという名前にした. もちろんN+1問題の検出のためのライブラリというわけではないし, 動的に検出するのではなく原理的に問題が発生しないようにするものなので, 思

    bullet-scala: N+1クエリ問題を回避する - 貳佰伍拾陸夜日記
    Jxck
    Jxck 2015/08/17
  • モナドって結局何なのよ? — join to Monad v0.1.3 documentation

    モナドって結局何なのよ?¶ Haskell を勉強しようとすると必ず「モナド」ってのが出てきます。困ったものです。数学とか圏論とか関係があるらしくって、何が書いてあるんだか分からなくって嫌になってしまいます。でもね、Haskell って凄いらしいじゃないですか、格好良いらしいじゃないですか。ここはちょっとがんばって色々考えてみましょう。 そもそも Haskell って何なのよ?¶ 何なんでしょうね、Haskell って。コンピュータ言語らしいんです、あ、それは分かってると。良く挙げられる性質は次な感じ?: 関数型言語 強い型付け 遅延評価 参照透過 ここでちょっと型に関して見てみましょう。試しに Haskell の実装の 1 つである Hugs で 1 について考えてみます。Hugs では :type や :info というコマンドで hugs に型の情報などを質問することができます。例え

  • JavaScriptのモナド | POSTD

    恒等モナド Maybeモナド リストモナド 継続モナド Do 記法 連鎖呼び出し モナド とは、一連のステップによって実行する計算を記述する際に使用する、1つのデザインパターンです。 純粋関数型プログラミング言語 では、モナドは 副作用を管理する ために広く利用されていますが、 マルチパラダイム言語では、モナドで複雑性を制御することもできます 。 モナドはデータ型をラップして、空の値を自動的に伝播したり( Maybe モナド)、非同期コードを簡略化したり( 継続 モナド)といった、新たな動作を既存のデータ型に追加します。 一連のコードをモナドと見なすためには、その構造には次に挙げる3つの要素が含まれていなければなりません。 型コンストラクタ — 基的な型に対してモナドの動作を追加した型を作成する機能です。例えば、基的なデータ型 number に対して、 Maybe<number> とい

    JavaScriptのモナド | POSTD
  • Promises are the monad of asynchronous programming – The If Works

    In my introduction to monads in JavaScript we saw a couple of monads and examined the commonality between them to expose an underlying design pattern. Before I get on to how that applies to asynchronous programming we need to take one final diversion and discuss polymorphism. Consider the list monad that we implemented before: var compose = function(f, g) { return function(x) { return f(g(x)) }; }

  • Incorporate monads and category theory · Issue #94 · promises-aplus/promises-spec

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    Incorporate monads and category theory · Issue #94 · promises-aplus/promises-spec
  • A proof that Promises/A is a Monad

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    A proof that Promises/A is a Monad
  • Category Theory for Promises/A+ - BAM Weblog

    Promises are being debated in the JavaScript community. The most popular specification is Promises/A+. It’s a fairly small specification, containing only a single function: then. The function is heavily overloaded which makes it quite complicated - way more than it has to be. I’ll try to show how category theory can give us a much simpler, more generalised and lawful API! A proper Promise/A+ imple

  • 継続モナドによるリソース管理 - Qiita

    継続モナドって何に使うんだ問題に対する一つの例。 リソース管理の問題 プログラミングをやっていると必ずまとわり付いてくるのがリソース管理の問題です。ここで指すリソースというのは、ファイルのハンドルだとか、ソケットだとか、排他処理のためのロックだとか、グラフィックのハンドルだとかそういう話で、GCのない言語だとメモリの管理もこれに含まれるでしょうか。 言うまでもなく、リソースを確保した後はしかるべきタイミングで確実に解放してやる必要があります。しかし往々にして、現実のプログラムではリソースの解放漏れが発生してしまいます。単に解放するコードを書き忘れると言うのが一番単純でしょうもない理由ですが、それでも、C言語のようにリソース解放のための特別な仕組みを持たない言語では、これを徹底するのも結構骨の折れることだったりします。それはともかく、もう少し高尚な悩みとしては、例外との組み合わせで発生する解

    継続モナドによるリソース管理 - Qiita
    Jxck
    Jxck 2015/06/21
  • erlando - ErlangでMaybeモナドとdo記法を使う - Qiita

    ErlangでHaskell風の Maybeモナド と do記法 を使う方法。エラーチェックなどを繰り返し行うコードが簡潔に記述できる。RabbitMQの開発者が公開した erlando で実現する。 erlandoにはListモナドやStateモナドなども含まれており、もちろん自分で新たにモナドを書くこともできる。また一部のモナドではMonadPlus型も実装されており guard/2 関数などが使える。さらに、関数の部分適用を読みやすく記述できる「cut」や、関数のインポート時に関数名を変更することで名前の衝突を避ける「import as」という機能もある。 maybe(A) 型 Erlang/OTPでは処理が失敗するかもしれない関数は、失敗したことを「例外」ではなく、「戻り値」で表現する。例えば lists:keyfined/3 ではキーが見つからない場合 false を、 file

    erlando - ErlangでMaybeモナドとdo記法を使う - Qiita
    Jxck
    Jxck 2015/06/09
    オワコンらしいのでメモっとく > https://twitter.com/voluntas/status/608113605632917504
  • Monads in JavaScript

    Monad is a design pattern used to describe computations as a series of steps. They are extensively used in pure functional programming languages to manage side effects but can also be used in multiparadigm languages to control complexity. Monads wrap types giving them additional behavior like the automatic propagation of empty value (Maybe monad) or simplifying asynchronous code (Continuation mona

    Monads in JavaScript
    Jxck
    Jxck 2015/06/05
    モナドっぽいインタフェースだけじゃなく、 generator 使って do 記法も真似てる。
  • エラー処理の地学史、もしくはあなたがMaybeモナドを使うべき理由。 | 月と燃素と、ひと匙の砂糖

    (以下、カノッサの屈辱(テレビ番組)のノリでお願いします) コンピュータの理論を確立したチューリング。彼は、無限のテープの長さを持ち、単なる計算を行うだけのチューリングマシンを夢想した。 しかし、我々の生きる現実世界におけるコンピュータでのプログラムに於いては、計算の失敗=エラーが発生するのは避ける事ができない宿命である。ネットワーク接続失敗、ファイルが見つからない、メモリが確保出来なかった…等々。すべてのエラーを書き出すには、それこそ無限の長さの紙が必要であろう。プログラム進化の歴史は例外との戦いであると言っても過言ではない。今回の講義では、プログラミング言語の様々な進化のうちの「エラー処理」に着目し、その長い戦いの歴史を概観する。 まずは、いにしえの先エクセプション紀におけるエラー処理を見てみよう。 先エクセプション紀:エラーコード-1の時代 エクセプション(exception)と呼ば

  • モナドの本当の力を引き出す・・・モナドによる同期/非同期プログラミングの抽象化 - xuwei-k's blog

    以下の2つの続き ScalaでFutureとEitherを組み合わせたときに綺麗に書く方法 FutureとEitherの話の続き(ApplicativeとMonadの違い) 上記の2つ(特に最初の方)を読んだことを前提で書くので、読んでない人は先にそちらを読みましょう。 なんだか少し関連する話(?)で盛り上がっていて、書かないといけない気がしてきたので 非同期プログラミングの難しさとScalaのFuture そのtogetterの議論について色々書きたいこと*1もありますが、それは置いておき、表題の「モナドによる同期/非同期プログラミングの抽象化」について書きます。というか、(非同期プログラミングの話より)便乗してモナドとモナドトランスフォーマーの便利さを話したいだけかもしれません(?) 前回2つは「Future使って非同期にしても、だいたい関数の体同じでいけるよ」ということを書きました

    モナドの本当の力を引き出す・・・モナドによる同期/非同期プログラミングの抽象化 - xuwei-k's blog
    Jxck
    Jxck 2015/03/29
  • ES5の範囲でOption<T>型を表すライブラリ、option-t を作った - saneyuki_s log

    動機 初期状態で未選択なラジオボタンがあるようなフォームを作っている場合、ラジオボタンに対応するモデルの値を「この値は未選択である」というのをJSで表現するのは結構面倒くさい。チェックボックスであれば, booleanのどちらかで状態が確定するが、ラジオボタンだと取りうる値は複数になるし、初期状態で選択されているか否かの問題が発生する。選択されていない状態を専用にフラグとして持つのは気持ち悪いが、かといって、未選択の状態を-1や9999ないしnull、undefinedで表現するのは危うい。コードを書いた人しかわからない。 RustScalaなどのようにOption<T>/Maybeがある言語なら、こんなまどろっこしい思いはせずに、明示的に値の有無を表現できる。 というわけで、ないなら作ってしまえば良いじゃないメソッドで作った。 Option<T>型について 私が説明するよりもわかりや

    ES5の範囲でOption<T>型を表すライブラリ、option-t を作った - saneyuki_s log
  • https://qiita.com/falsandtru/items/4b1a38e15c9b0dadfa6a

  • TypeScriptと関手やモナドなど - 檜山正幸のキマイラ飼育記 (はてなBlog)

    2008年に書いた記事「CPS(継続渡し方式)変換をJavaScriptで説明してみるべ、ナーニ、たいしたことねーべよ」はCPSの説明にJavaScriptを使っています。しかし、JavaScriptでは型宣言や型総称(ジェネリックス)が使えないので、「未来のJavaScript」という最初の節で架空のJavaScript方言を定義しました。最近のAltJSのなかには、当時の「架空のJavaScript方言」の機能を実現したものがあります。そのなかでも、TypeScritは強力な型システムを持っています。2015年に現存するJavaScript風言語であるTypeScriptで、関手やモナドがうまく書けるかどうか探ってみます。 内容: 圏論とプログラミング言語 TypeScriptの型の書き方 お題はリストモナド モナドの乗法と単位、全体のまとまり 追記: TypeScriptに関する補足

    TypeScriptと関手やモナドなど - 檜山正幸のキマイラ飼育記 (はてなBlog)
    Jxck
    Jxck 2015/03/23