並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 31 件 / 31件

新着順 人気順

Monadの検索結果1 - 31 件 / 31件

  • ソフトウェアエンジニアとしてモナドを完全に理解する / make-perfect-sense-of-monad

    人類には早すぎる、謎の計算ロジックに立ち向かう / Strugle with the most complicated logic ever

      ソフトウェアエンジニアとしてモナドを完全に理解する / make-perfect-sense-of-monad
    • 圏論とプログラミング / Category Theory and Programming

      シンポジウム「圏論的世界像からはじまる複合知の展望」@慶応大学 (Jan 25, 2020) http://www.inter.ipc.i.u-tokyo.ac.jp/symposium.html 「圏論とプログラミング」発表スライドメモ - Qiita https://qiita.com/inamiy/items/9af1da1faec22cd968f0 Video: https://www.youtube.com/watch?v=Ua6NE48_-1s

        圏論とプログラミング / Category Theory and Programming
      • 「Haskellのモナド完全に理解した」試験問題

        Haskellは勉強したけどモナドを本当に理解したって言えるのか自信がない… \そんな人向けの試験問題を作りました!/ これから実施する試験問題を、10問中8問正解すればあなたはHaskellのモナドを完全に理解しています。私が保証します! それではさっそく〜〜 第一問 まずは緊張をほぐしましょう。 Haskellの Monad は○○○○である ○○○○に当てはまるのは以下の選択肢のうちどれでしょう? 型 関数 型クラス 型シノニム 答え

          「Haskellのモナド完全に理解した」試験問題
        • IO モナドと副作用 - Haskell-jp

          純粋関数型プログラミングで副作用を扱う方法Posted by Mizunashi Mana on April 05, 2020 Haskell は他のプログラミング言語には見られない特徴を多く持っている。その中の1つが純粋性だ。Haskell は純粋関数型プログラミング言語であることを、売りの1つにしている。しかし、純粋性は多くの場合表現力の縮小を招く。ところが Haskell は、IOモナドの導入により、通常のプログラミング言語と変わらぬ表現力を持てるようになっている。これは、とても驚くべきことだ。しかし、同時にこれは Haskell 入門者にとって、大きな混乱を招いているようだ。 今回は、そもそも純粋性とはなんなのか、なぜ他の言語は純粋性を担保できないのか、そして Haskell はどうやって IO モナドにより純粋性を担保しつつ他の言語と変わらない表現力を持てるようにしているのかにつ

            IO モナドと副作用 - Haskell-jp
          • Pythonを使って関数型プログラミング Part.2

            2019年9月16、17日、日本最大のPythonの祭典である「PyCon JP 2019」が開催されました。「Python New Era」をキャッチコピーに、日本だけでなく世界各地からPythonエンジニアたちが一堂に会し、さまざまな知見を共有します。プレゼンテーション「Pythonで始めてみよう関数型プログラミング」に登壇したのは、株式会社SQUEEZEの寺嶋哲氏。講演資料はこちら 不変/永続データ構造を提供するパッケージ 寺嶋哲氏:続いて、不変/永続データ構造についてです。 listを操作する関数の問題点について、例題で見ていきましょう。add_mangoは果物名の文字列のlistをとって、mangoをそのlistに足して返します。change_from_apple_to_bananaは、同じようにlistをとってappleを探して、bananaに入れ替えて返します。 その

              Pythonを使って関数型プログラミング Part.2
            • 【追記あり】ChatGPTじゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。 - Qiita

              プログラミング言語が2-圏として考えられるということについてソースから訳出した。(2023.2.22) 動機 最近、chatGPTにいろいろ尋ねるのが流行っているらしい。Haskellで有名なモナドの概念がなぜ導入されたか尋ねている人を見かけて、そういやそういう記事見たことないなと思ったので適当に調べた。 一次ソース 元ネタは以下のマイナーだと思われる文献 An abstract view of programming languages Eugenio Moggi教授のあんま読まれてない方の論文 Denotational Semantics Peter D. Mosses教授のこの論文(2部あって後半の方) 邦訳があり邦訳で読んだ。 プログラミングのモナド発見の経緯 プログラミングのモナドはなんか包んだり抜き出したり見たいな感じの概念で知られてますが、プログラミングの概念をモジュール化す

                【追記あり】ChatGPTじゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。 - Qiita
              • Scala における継続モナドの実装と活用

                「Scala秋祭り」の登壇資料 https://scala-aki-matsuri.connpass.com/event/142817/ - v1.0.0 に更新 - v0.1.0 をアップロード

                  Scala における継続モナドの実装と活用
                • Levelsモナドを使った幅優先探索の仕組み

                  Haskellは関数型プログラミング言語と呼ばれますが、関数だけでなく型も重要な役割を担っています。アルゴリズムを考える時、手続きの最適化だけでなく、正しいデータ型を選択することがシンプルなアルゴリズムを導き、実装をコンパクトにできるというのはよくある話です。今回は非常に単純な型でありながら幅優先探索というアルゴリズムのエッセンスを詰め込んだ Levelsというデータ型 について紹介したいと思います。 ピタゴラス数を列挙する ピタゴラス数とはピタゴラスの定理における関係式 a^2 + b^2 = c^2 を満たす自然数の三つ組です。 Haskellのリストは遅延評価なので 全ての自然数の三つ組を列挙する 列挙した自然数の中から関係式を満たすものだけ抽出する という手順でピタゴラス数を列挙することを考えてみましょう。 実際この方法は有限な探索範囲ではうまく機能します。 pyth :: [(I

                    Levelsモナドを使った幅優先探索の仕組み
                  • Rustでもモナドは実装できるのか?(再) - Don't Repeat Yourself

                    この記事は言語実装Advent Calendar 2020 25日目の記事です。(2022-11-06: 記事の内容を追記していますが、この記事の結論としては「似たようなものは作れるが、完全体にはならない」です) 前提知識 高階カインド型 モナド 従来のエミュレーション方法 Generic Associated Types を用いたエミュレーション(new!) 型クラスを定義する Functor を用意する Pointed を用意する Applicative を用意する Monad を用意する いくつか型を実装していく 現状実装できないもの do 記法 Generic Associated Types(GATs)とは何か 追記(2022-11-06) リポジトリ 参考文献 モナドに関する話題が言語実装アドベントカレンダーの範疇に入るのかわかっていませんが*1、プログラミング言語がお好きな方

                      Rustでもモナドは実装できるのか?(再) - Don't Repeat Yourself
                    • Scalaプログラマが圏論を学ぶためのオススメ文献 - 3選 - Qiita

                      圏論は数学の一分野です。これを学ぶのには「数学書」を手に取るのが王道なのですが、残念ながらこれは大部分のプログラマに理解できる言葉では書かれていません。「定義・命題・証明」の積み重ねで書かれています1。ここで大半のScalaプログラマは苦い顔をすると思います。もう少し分かりやすいScalaプログラマ向けの圏論入門がないかと探してみると「Haskell」向けの記事が大量に引っかかるでしょう。ここで多くのScalaプログラマは心を折られてしまいます。「圏論」はまだScalaプログラマには早すぎたんだと・・・ 本記事ではそんなあなたに贈る3つの文献をご紹介したいと思います。 (本記事は自分のブログからの転載記事です。) はじめに 本記事は圏論に興味があるScalaプログラマを対象にしています。特にプログラマにとって実用的な圏論の知識をScalaを通して身につけたい方にオススメします。 プログラマ

                        Scalaプログラマが圏論を学ぶためのオススメ文献 - 3選 - Qiita
                      • 君の手で作るモナドは怖くない - builderscon tokyo 2019

                        Abstract 本セッションの目的は、ずばり モナド (monad) に対する 初心者の心理的障壁を取り除くこと です。モナドはプログラミング言語 Haskell と関連して言及されることが多く、世間では何か得体のしれない難解な概念だというイメージが先行しています。しかし、実際にはどのプログラミング言語にもある「処理」の概念を一般化しただけで、プログラマにとっては顔見知りの相手に過ぎません。 本セッションでは、実際の使用場面から逆算してモナドを再発明することでその必然性を体感し、必要以上に強調された神秘性を引きはがすことを目標とします。受講後には、セッション内で扱わなかった Haskell の基本文法を少し補うことで、モナドを利用した単純なプログラムならすぐに書けるようになるでしょう。 そもそも、なぜモナドや、それを用いる Haskell にはこんなにも怖ろしげなイメージが先行しているの

                        • State モナドの代わりに Reader モナドを使う

                          注意 この記事は公開当時主張に誤りを含んでいたため,大幅に書き直しています.また,公開当時の主張の誤りについても,付録として載せておきました. Haskell で State モナドはモナドの代表格だ.Haskell 入門者は,多くの場合,状態を伴った計算を State モナドで書くことを習うだろう.しかし,実用上の多くの場面では,State モナドではなく他の選択肢を選んだ方がいい場合がある.一つの選択肢が,Reader モナドと可変参照を使う方法だ.今回は,この手法を使う利点と利用場面について考えていこうと思う. なお,環境として以下を想定している.

                            State モナドの代わりに Reader モナドを使う
                          • https://samgrayson.me/2019-08-06-monads-as-a-programming-pattern/

                              https://samgrayson.me/2019-08-06-monads-as-a-programming-pattern/
                            • 関数型ニキ達にインスパイアされた最近の Scala 開発の取り組み - FLINTERS Engineer's Blog

                              こんにちは、中途三年目の堀越です。 近頃、Scalaのコミュニティにおいて Functional Programming による実装テクニックを紹介する記事や発表を見たり聞いたりすることは珍しいことではなくなってきました。弊社にもたくさんの関数型ニキ*1が在籍しており、わたしも日々影響を受けています。 ということで、本日はわたしが所属するチームでの日々の Scala 開発における取組みや戦略をサンプルコード*2と合わせて紹介していきます。 高カインド型によるEffect型の抽象化 私達はドメイン駆動設計を実践しています。なのでドメインロジックはドメインの関心事に集中できるのが理想です。ドメイン層を抽象化し、特定の実行環境や技術的関心事に依存しない戦略として 高カインド型 を用いてEffect型を抽象化します。 インターフェース定義 例えば Repository のインターフェイスのは以下の

                                関数型ニキ達にインスパイアされた最近の Scala 開発の取り組み - FLINTERS Engineer's Blog
                              • Type level mapを使ったpreload風関連リソースの取り回し。Indexed monad添え

                                この記事はHaskell Advent Calendar 202011日目の記事です(遅延)。 大晦日です。いかがお過ごしでしょうか。 Haskellでapi server等を作った際、rdbへの問い合わせでPreload的なことを行う箇所で、Type level mapを使った所、なかなかの使い勝手だったので、共有します。 さらにIndexed Monadを使い、明らかに残念だった箇所を改善します。 preload? 1+N問題を起こさぬよう、事前に関連リソースを問い合わせておくもの。prefetchとかとも。 posts = Post.find(...) # query Post # view for p in posts for t in p.tags # ここで問い合わせるとN回なので、事前に問い合わせていて欲しい render t やること viewが要求するpreloadを定義

                                  Type level mapを使ったpreload風関連リソースの取り回し。Indexed monad添え
                                • Monoids in the Category of... | Blog | jackkelly.name

                                  The unfortunate meme phrase “a monad is just a monoid in the category of endofunctors, what’s the problem?” comes from two sources: The fact and most of the phrasing comes from Mac Lane’s Categories for the Working Mathematician, but “What’s the problem?” is a cheeky addition from a funny 2009 blog post: A Brief, Incomplete, and Mostly Wrong History of Programming Languages The meme words have bec

                                  • Monads and GATs in nightly Rust - FP Complete

                                    This blog post was entirely inspired by reading the GATs on Nightly! Reddit post by /u/C5H5N5O. I just decided to take things a little bit too far, and thought a blog post on it would be fun. I want to be clear from the start: I’m introducing some advanced concepts in this post that rely on unstable features in Rust. I’m not advocating their usage at all. I’m just exploring what may and may not be

                                      Monads and GATs in nightly Rust - FP Complete
                                    • すごいHaskell、ハスケル子と学ぼう! - Qiita

                                      「すごいHaskellたのしく学ぼう!」という本を読みました。 せっかく関数型言語の本を読んだので、今回は関西型言語を用いて、学んだ内容について綴っていきたいと思います。 ある日、某会社にて ワイ「なぁ、ハスケル子ちゃん」 ワイ「Haskellの記事とか読んでると出てくる、モナドってアレ何なん?」 ハスケル子「型クラスですね」 ワイ「型クラス・・・」 ワイ「ごめん、ぜんぜん分からんわ」 ワイ「型クラスって何・・・?」 ハスケル子「型の分類みたいな感じです」 ハスケル子「classって、分類とか同類って意味を持っているので」 ワイ「型の分類・・・」 ワイ「型自体がそもそも、数値とか文字列とか」 ワイ「そういった分類みたいな感じなのに、それを更に分類すんの・・・?」 ワイ「どどどどういうこと・・・?」 ワイ「舌打ちせんといてや・・・」 Int型とFloat型って似てるよね ハスケル子「えっと、

                                        すごいHaskell、ハスケル子と学ぼう! - Qiita
                                      • Functors and Monads For People Who Have Read Too Many "Tutorials" - iRi

                                        Celebrating Over 10 Years Of Being Too Lazy To Pick A Tagline Title is literally true. This may not be the best place to learn about these concepts for the first time, because I'm going to focus on knocking down the misconceptions about them. Then again, it may not be the worst place, for the same reason. I had promised myself I would not add to the pile of functor or monad "tutorials", but I've b

                                        • Lysxia - Free monads of free monads

                                          Yo dawg, I herd you like free monads… It is well known that a free monad is a monad. It is less known that the free monad functor, that thing which generates free monads, is also a monad. Let us explore that idea in Haskell. After setting up a background of indexed types, the monad of free indexed monads will be introduced. Ways of smashing free monads into themselves will be attempted, in complia

                                          • Scala におけるモナドって何だろう?

                                            Scala関西Summit 2019 の登壇資料です。 変更履歴 v1.0.0 v0.1.1 - init

                                              Scala におけるモナドって何だろう?
                                            • Freeモナドのしくみ - Qiita

                                              Freeは、Functorを受け取ってMonadをつくることができるモナドです。 Freeのデータ型の定義は以下です。 よくわからない再帰的な定義がされていますね。初見で読めたらすごいと思います。 この記事では、上の定義のようなFreeがどのようにMonadをつくるかを見ていきます。 次のような順で説明していきます。 PureScriptの予備知識と用語説明 ListについてFunctor / Monadを実装する Free fについて、同じようにFunctor / Monadを実装する Free fだけでなく、Freeそれ自体もモナドではあるんですが、1つ高いレイヤー(誤魔化した言い方)でのモナドなのでこの記事では触れません。 PureScriptの型システムでは表現できないですしね。 忙しい人のためのFree この記事で説明したいことをひとことで言うと、 Pureがpure、Freeが

                                                Freeモナドのしくみ - Qiita
                                              • プログラムから圏のことばまで,或はモナドについて(前半) - エムスリーテックブログ

                                                こんにちは,エムスリーエンジニアリングGの榎田(@niflh)です.趣味は数学とテレビゲームです. 以前の記事 で Scala を通して関数型を勉強した話をしましたが,最近社内で Scala with Catsを読む勉強会をしています.この本は,Cats という「Scala で関数型プログラミングをサポートするライブラリ」を勉強しつつ,関数型特有の概念に慣れ親しむことを目的としたものです. この勉強会も,参加者の皆さんと二人三脚で進み,モナドを扱う章に入りました.そんな中,参加者の一人から,次のような意見が出ました. モナドをやるとよく圏論が出てくるので,かじってみると面白い一方,よくわからないことも多い.プログラミング上のどの操作が圏論とかのどの操作に紐付いてて,何が嬉しいのか,あたりがまとまってると嬉しい. 尤もだと思ったので,色々調べて考えた結果が本稿です.一記事には長すぎるようにも

                                                  プログラムから圏のことばまで,或はモナドについて(前半) - エムスリーテックブログ
                                                • dry-monadsを使ってRubyでモナドの夢を見る - Qiita

                                                  はじめに 皆さんはRuby、好きですか?僕は好きです。 皆さんはモナド、好きですか?僕は好きです。 好きなものと好きなもの、どっちも使いたくなるのが人間の性。 どうにかしてRubyでモナドを使いたい! ということで、Rubyでモナドを使って、Rubyでよく書くありがちなコードをいい感じにしていきます。 モナドってなに? モナドはHaskellなどの関数型言語で使われる概念です。 細かい定義は他の記事に任せますが、簡単にいってしまうと「書いたコード(文字通り)よりも外の世界から受ける影響に安全にアクセスする方法」です。こういうのをプログラミングでは「副作用」って言ったりします。 モナドについてはこことここの記事が個人的に勉強になりました。 モナドが力を発揮する場面としてよくあげられるのが「IO」です。IOはまさに「自分が書いたコードの外から受ける影響」ですよね。 入力ではコードを実行するまで

                                                    dry-monadsを使ってRubyでモナドの夢を見る - Qiita
                                                  • Lysxia - The reasonable effectiveness of the continuation monad

                                                    There are common monads associated with common effects: Maybe for failure, [] (list) for nondeterminism, State for state… What about the continuation monad? We shall see why the answer is all of the above, but better. Indeed, many effects can be understood and implemented in a simple and uniform fashion in terms of first-class continuations. Extensions and imports for this Literate Haskell file {-

                                                    • Optics and Kleisli arrows

                                                      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

                                                        Optics and Kleisli arrows
                                                      • Zipperとは - Qiita

                                                        Zipperというデータ構造について、図を使ってわかりやすく解説したいと思います。 この記事ではZipperがどういったものかは説明しますが、それがどう応用されうるかは紹介しません。 応用例については、少し長いですが以下の記事がわかりやすかったです。 Haskell/Zippers - Wikibooks また、ComonadとしてのZipperの応用例は、以下の記事がとてもわかりやすかったです。 コモナドを使った抽象化の威力をライフゲームで試してみた - Qiita ただ、Haskellは遅延評価で、PureScriptは正格評価なので、この記事とは実装がところどころ異なります。 サンプルコードはPureScriptですが読めなくても図さえ見れば理解に大きな支障はないと思います。 これは余談ですが、シンタックスハイライトの関係で```haskell ... ```でコードブロック書いてる

                                                          Zipperとは - Qiita
                                                        • Introduction to Free Monads

                                                          If you’ve been around Haskell circles for a bit, you’ve probably seen the term “free monads”. This article introduces free monads and explain why they are useful in Haskell development. To whet your appetite a little, free monads are basically a way to easily get a generic pure Monad instance for any Functor. This can be rather useful in many cases when you’re dealing with tree-like structures, bu

                                                            Introduction to Free Monads
                                                          • Writer Monadで気軽にMonad則を破る - Haskell-jp

                                                            Tweet 🎅この記事は、Haskell Advent Calendar 2020 25日目の記事です。 🎄Happy Christmas!!🎄 今回は先日(といっても元の質問の投稿からもう何ヶ月も経ってしまいましたが…)StackOverflowに上がったこちら👇の質問に対する回答の、続きっぽい話を書こうと思います。長いし、質問の回答からスコープが大きく外れてしまうので記事にしました。 haskell - モナド則を崩してしまう例が知りたい - スタック・オーバーフロー MonadとMonoidにある重要な繋がりを説明した後、それを応用したWriter MonadがどうMonoidを使ってMonad則を満たしているのか証明します。そして、Writerのそうした性質を用いて簡単にMonad則を破る例を紹介することで、読者のみなさんがMonad則のみならずdo記法やMonadそのもの

                                                              Writer Monadで気軽にMonad則を破る - Haskell-jp
                                                            • Pythonでもジェネレーターで関数モナドとStateモナドを模倣してみた - Qiita

                                                              ジェネレーターを DSL のように使って関数モナドと State モナドを模倣してみました。記述をそれっぽく見せることに重点を置いたため、bind や return を正確に実装したわけではありません。 この記事は次の記事の Python 版です。同じことが出来るはずなので確認したくなりました。 ジェネレーターで関数モナドとStateモナドを模倣してみた 結果的に、ジェネレーターの return の仕様の変遷や、デコレーターが有用なことなどが分かりました。 実装 実装を並べると、関数モナドと State モナドの差分が分かりやすいです。 関数モナド State モナド

                                                                Pythonでもジェネレーターで関数モナドとStateモナドを模倣してみた - Qiita
                                                              • はじめての Monad, Monad Transformer, Extensible Effects | Recruit Tech Blog

                                                                はじめての Monad, Monad Transformer, Extensible Effects Ariizumi Shumpei こんにちは。RECRUIT Job for Student 2021 Summer で、スタディサプリ ENGLISH の開発を行なっていた有泉洵平です。 スタディサプリ ENGLISH のサーバサイドでは Extensible Effects を導入しています。それを扱うにあたり Monad, Monad Transformer, Extensible Effects を学んだため、この記事にまとめます。 また、RECRUIT Job for Student 2021 Summer に興味のある方は、そちらについても記事を書いたため、参考にしてください。 要約 Monad とは、pure と flatMap というメソッドを持ち、Monad 則を満たすも

                                                                  はじめての Monad, Monad Transformer, Extensible Effects | Recruit Tech Blog
                                                                1