タグ

Haskellとmonadに関するpoginのブックマーク (23)

  • コモナドを攻略する - bitterharvest’s diary

    2.コモナド 今回の記事はコモナド(余モンドとも言われる)だ。モナドはあちらこちらで出会うことが多いが、コモナドについての説明はそれほど多くない。今回の記事でも示すが、実はコモナドの概念はとても面白く、現実の世界の中でこれはコモナドではと思うことが多々ある。同窓会などで、久しぶりにかつてのクラスメイトに会って、昔話に話を咲かせているときに、思い出が違っていることにビックリすることが往々にしてある。事実は変わらないはずなのだが、年月がたつにつれてそれぞれの記憶が変容し、異なってしまったのだろう。これなどコモナドのよい例だと思うのだが、正しいかどうかは記事を読んでから確認して欲しい。 2.1 コモナドの定義 コモナドとモナドは双対概念だ。コモナドは、モナドを定義したときの射の矢印の方向を反対にするだけなのだが、その概念から受け取る感覚は、随分と異なるものになる。圏論でのモナドは哲学からの借用語

    コモナドを攻略する - bitterharvest’s diary
  • Haskell 状態系モナド 超入門 - Qiita

    Haskellではモナドと呼ばれる部品を組み合わせてプログラムを作ります。状態を受け渡すタイプのモナドの使い方の初歩を説明します。ライブラリで用意されたモナドを手っ取り早く使うことを目的としているため、モナドの作り方や圏論には言及しません。 シリーズの記事です。 Haskell 超入門 Haskell 代数的データ型 超入門 Haskell アクション 超入門 Haskell ラムダ 超入門 Haskell アクションとラムダ 超入門 Haskell IOモナド 超入門 Haskell リストモナド 超入門 Haskell Maybeモナド 超入門 Haskell 状態系モナド 超入門 ← この記事 Haskell モナド変換子 超入門 Haskell 例外処理 超入門 Haskell 構文解析 超入門 【予定】Haskell 継続モナド 超入門 【予定】Haskell 型クラス 超入門

    Haskell 状態系モナド 超入門 - Qiita
    pogin
    pogin 2017/09/08
    STモナドが探している便利なやつだった
  • IOモナドで使うときだけログを吐く関数を定義する - 北海道苫小牧市出身の初老PGが書くブログ

    純粋な関数として定義できるんだけど内部でやってることが複雑な場合、何が起きてるかわからないと心配だからとログを吐く機能をつけると、その時点でそいつは IO アクションになってしまう。ログを吐くという副作用を持つのだから IO になるのは当たり前でそれを避けるべきではないのだけど、ログを吐かなくていいいシチュエーションでは、その計算を純粋な関数として使えたほうが理想的ではある。 そんなことを Identity と 型クラス 使えば簡単にできるんじゃねと思いついたんだけど、 monad-logger でそもそも機能が提供されてた。 runLoggingT や runNoLoggingT でモナドに class MonadLogger が持つロギング用のアクションを追加できるのだけど、前者はモナドが class MonadIO のとき、後者は任意の class Monad について使えるようイン

    IOモナドで使うときだけログを吐く関数を定義する - 北海道苫小牧市出身の初老PGが書くブログ
  • YonedaとCoYoneda、そしてFunctor - capriccioso String Creating(Object something){ return My.Expression(something); }

    当は、 Freeモナドを超えた!?operationalモナドを使ってみよう http://fumieval.hatenablog.com/entry/2013/05/09/223604 に影響されて、Operationalモナドの話をまとめようと思ったのですが、ちょっと時間なさそうだったので、今日はちょっとCoYonedaの話をしましょう。 上記ブログでは、CoYonedaについて「ただのデータ型からFunctorを生み出せる」と紹介されています、これがいったいどういう事か、ちょっと深く追ってみましょう。 初めに 今回は、任意の型をFunctorにする事が目標なので、まず簡単に以下のような型を定義しておきます。 data Hoge a = Foo a | Bar a deriving Show 米田先生とYoneda Yonedaというのは米田信夫という日数学者の名に因んだ「米田の

    YonedaとCoYoneda、そしてFunctor - capriccioso String Creating(Object something){ return My.Expression(something); }
  • http://www.sharp-bang.jp/prog/monad_memo.html

  • 多相関数のprintfデバッグをGHCiで - www.kotha.netの裏

    Haskellでのデバッグといえばprintfデバッグなのではないかと思う。printfデバッグは大抵の場合うまくいくが、多相的な関数を書いているときは不便なことがある。表示したい値を文字列にする手段がない場合だ。 import Debug.Trace import Data.List mysort :: (Ord a) => [a] -> [a] mysort [] = [] mysort (x:xs) = trace ("inserting " ++ show x) $ -- エラー! xはshowできない insert x $ mysort xs main = print $ mysort [1,3,2,0] -- デバッグ用入力 実際のデバッグ入力であるIntegerはshowできるのだが、mysortの型からはそれが演繹できないのでshowを呼ぶことができない。ここでxを表示する

    多相関数のprintfデバッグをGHCiで - www.kotha.netの裏
  • 例題で比較する状態系のモナド - あどけない話

    金曜日に状態系のモナドを説明しないといけないので、例題を書いて比較できるようにしておきます。 呪文として、以下のモジュールを読み込んでおきましょう。 import Data.Char import Control.Monad.Identity import Control.Monad.Reader import Control.Monad.Writer import Control.Monad.State Identityモナド 入力が一つで、出力が一つのモナド。面白みはない。 i :: Identity Int i = do x <- return 2 y <- return 3 return $ x * y でも、モナドは Haskell の中に住むマイクロ言語で、このマイクロ言語でマイクロプログラムを作成した後は、run で実行するものだというイメージは分かるかも。 > runIde

    例題で比較する状態系のモナド - あどけない話
  • Freeモナドって何なのさっ!? - capriccioso String Creating(Object something){ return My.Expression(something); }

    最近Haskellerの間でFreeモナドが熱いです。 Haskellで悟りを開いた人がFreeモナドで再び悟りを開いたりして、なんかよく解らないけど凄いことになっている今日このごろですが、すっかり乗り遅れていました。どうも、貴女のちゅーんです。 で、皆こぞって「すごいすごい」と言っているFreeモナドなので、流石にいつもまでも全然知らないのはマズイんじゃないかなぁとか思って、重い腰を持ち上げ調べながらこの記事を書き始めたワケですよ。はい。*1 けっこう急ぎで勉強して書き上げたので随所に間違いあるかもです。ツッコミお待ちしてます。 さて、この「Freeモナド」について、オレオレ定義で簡単に言葉にすると。「Functorと組み合わせて様々な挙動を実現できるモナド」です。 大抵「Monadのインスタンス」というと、MaybeにしてもIOにしても、わりと具体的な事象を扱ってますが、このFreeモ

    Freeモナドって何なのさっ!? - capriccioso String Creating(Object something){ return My.Expression(something); }
  • Why free monads matter

    Interpreters Good programmers decompose data from the interpreter that processes that data. Compilers exemplify this approach, where they will typically represent the source code as an abstract syntax tree, and then pass that tree to one of many possible interpreters. We benefit from decoupling the interpreter and the syntax tree, because then we can interpret the syntax tree in multiple ways. For

  • モナド変換子の使い方がわかってきた

    モナドの上にまたモナドって株か?二階建てか?なんて思って敬遠してたのだけど、なんとなくわかってくると、包んで包んでしてるだけじゃないかと。 RWH18章 モナド変換子を使わないでログ記録。これはIO [(FilePath, Int)]型になる。 module CountEntries (listDirectory, countEntriesTrad) where import System.Directory (doesDirectoryExist, getDirectoryContents) import System.FilePath ((</>)) import Control.Monad (forM, liftM, when) listDirectory :: FilePath -> IO [String] listDirectory = liftM (filter notDots

    モナド変換子の使い方がわかってきた
  • Sudoku - HaskellWiki

    Here are a few Sudoku solvers coded up in Haskell... Monadic non-deterministic solver Here is a solver by CaleGibbard. It possibly looks even more naïve than it actually is. This does a backtracking search, trying possibilities until it finds one which works, and backtracking when it can no longer make a legal move. import MonadNondet (option) import Sudoku import System import Control.Monad solve

  • はてなブログ | 無料ブログを作成しよう

    来年も作りたい!ふきのとう料理を満喫した 2024年春の記録 春は自炊が楽しい季節 1年の中で最も自炊が楽しい季節は春だと思う。スーパーの棚にやわらかな色合いの野菜が並ぶと自然とこころが弾む。 中でもときめくのは山菜だ。早いと2月下旬ごろから並び始めるそれは、タラの芽、ふきのとうと続き、桜の頃にはうるい、ウド、こ…

    はてなブログ | 無料ブログを作成しよう
  • Haskellモナドトランスフォーマー(2) - みどりねこ日記

    関数getPasswordとそれを利用するコードを簡潔に書くために、IOモナドにMaybeモナドの特性を与えるモナドトランスフォーマーを定義します。これを、モナドトランスフォーマーの慣例的な名付け方に従い、最初に与える特性を持つモナドの名前+Tとし、MaybeTと呼びます。 MaybeTは、m (Maybe a)のラッパーで、mにはどのようなモナドも入ることが出来ます。(ここではIOに注目します。) newtype (Monad m) => MaybeT m a = MaybeT {runMaybeT :: m (Maybe a)} アクセサ関数runMaybeTを使うことによってMaybeTのなかに隠れた中身にアクセスできます。 モナドトランスフォーマー自身もモナドであるため、MaybeT mをMonadクラスのインスタンスとして置く必要があります。 instance Monad m =

    Haskellモナドトランスフォーマー(2) - みどりねこ日記
  • Haskell Day2012 - 参照透過性とは何だったのか

    3. 自己紹介 • @ruicc • Ruichi Kousuke • 好きな作曲家:A. Bruckner • 好きなバイオリニスト:Hilary Hahn • 好きな言語:Haskell • 爆発すればいい言語:PHP

    Haskell Day2012 - 参照透過性とは何だったのか
  • Applicativeのススメ - あどけない話

    この記事の目的は、Applicative 信者による Applicative スタイルの布教です。 簡潔に結論を述べると、 foo = do a <- m1 b <- m2 return (f a b) のようなコードを書きたくなったら foo = f <$> m1 <*> m2 と書きましょうということ。 合い言葉は、「do と return をなくせ!」です。 FunctorとMonadの間 Functor を特殊化した型クラスがMonadで、Monadの方が強力です。なぜなら、メソッドが増えるからです。 Functorのメソッドはfmapです。fmapの別名を (<$>) といいます。(この記事では、(<$>) と liftM を同一視します。) そして、Monadのメソッドは、ご存知の通り (>>=) と return です。 FunctorとMonadの間にApplicative

    Applicativeのススメ - あどけない話
  • 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

  • The Monad.Reader/Issue5 - HaskellWiki

  • わーい、モナドのインデックス付き圏が作れる - 檜山正幸のキマイラ飼育記 (はてなBlog)

    じっさまが「わーい」とか喜ぶのもどうかと思いますが、「作れたらいいな」と思っていたモナドのインデックス付き圏は作れそうです。わーい。 「なんだかわかんねーなー」と愚痴みたいなことをブログに書いて何の役に立つ?と思いきや、「またインデックス付き圏が出てきたけど、これはどうなっている?」にksさんからコメントをいただき、さらに次の論文もご紹介いただきました。 Descent for Monads http://www.tac.mta.ca/tac/volumes/16/24/16-24abs.html アブストラクトと「1. Introduction」の半分くらいを眺めて、第5章「5. Endofunctors and Monads」をザッとチェックしてみました。僕が「成り立っているとウレシイ」と期待していた結果は第5章の前半に書いてあります。ベースの圏に若干の条件は付きますが、圏と随伴対の圏

    わーい、モナドのインデックス付き圏が作れる - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 命題論理のタブロー - einblickerの日記

    Haskell | 21:17 | Coqの前にまずは論理学をつくるを棚から引っ張り出してきて論理学を復習中。やっぱ細かいところは結構忘れてるなぁ…。ついでに命題論理のタブローをやるプログラムをHaskellで書いてみた。タブローってのは論理式(の集合)が充足可能かどうかを調べるアルゴリズムのことです。 module Tableau (tableau) where import Data.List (find) import Control.Monad (MonadPlus, mplus, mzero, (>>=), (>>)) import qualified Control.Monad.Error import Control.Applicative ((), (*>), (), (import Text.Parsec (parse, ParseError, chainr1, bet

  • 檜山正幸のキマイラ飼育記 - 世界で一番か二番くらいにやさしい「モナド入門」

    気まぐれと偶然となりゆきで、ここ2,3回はモナドを話題にしました。googleで「モナド」を引いてザッと眺めると、「モナドはむずかしいー」とか「モナドで挫折した」みたいな雰囲気が感じられて、説明芸人の血が少し騒ぎましたね。「なら、予備知識ゼロでモナドの説明をしてやろうじゃねーか」と。 タイトルはだいぶ煽っちゃった…… けど、ハッタリじゃないつもり…… けど、実際はどうかな? ※印刷のときはサイドバーが消えます。 内容: とりあえず、あたりさわりなくモナドの来歴を紹介する こんな課題を考えてみよう:副作用付き計算 カウントアップする関数達 カウントアップしたい意志を戻り値で伝える それでは、いったい誰がカウントアップをするのだ 関数の引数の型をCountup型にまで拡張する そして、これがモナドだ とりあえず、あたりさわりなくモナドの来歴を紹介する 今からここで説明する「モナド(monad)

    檜山正幸のキマイラ飼育記 - 世界で一番か二番くらいにやさしい「モナド入門」