タグ

programmingとHaskellに関するryskosnのブックマーク (15)

  • 随伴を使って理解するStateモナドの実装

    前回の記事は魔法のように見えるStateモナドの実装も、順を追って見ていけば理解することは難しくないという話でした。 しかし状態の変更を順番に処理するというような手続き的な考え方にかなり近い構造が、うまくモナドになってくれるというのは少し不思議ですよね。 この記事では タプル (a, b) 関数 a -> b カリー化 curry :: ((a, b) -> c) -> a -> b -> c uncurry :: (a -> b -> c) -> (a, b) -> c といったHaskellの基的な要素が随伴と呼ばれる関係を構成することを見て、 その随伴からStateモナドが導かれることを説明していきたいと思います。 随伴 二つの圏 C, D と二つの関手 F : C \rightarrow D, G : D \rightarrow C が与えられたとしましょう。 もし GF = {

    随伴を使って理解するStateモナドの実装
  • 順を追って理解するStateモナドの実装

    突然ですが、Stateモナドの実装を書けますか? Stateモナドは自由に読み書き可能なグローバル変数のような機能を、副作用を伴わない純粋な関数だけを使って実装するための便利な概念です。使うだけなら簡単なので普段から便利に利用してる人も多いかもしれませんが、いざ自分で実装しろと言われると手が止まってしまう方もいるのではないでしょうか。 今回はそんなStateモナドの実装を丁寧に見ていき、仕組みを理解することを目指したいと思います。 State さっそく以下に示すのがStateモナドの型の定義です[1]。 まずStateはnewtypeを使って関数と同じ型として定義されます。この関数は以下の構造を意識して作られています。 実行前後で状態の型は変わりませんが、値に関しては変更することが可能になっているのです。 モナドにするためにはFunctorとApplicativeのインスタンスにする必要が

    順を追って理解するStateモナドの実装
  • recursion-drill/README.md at main · kazu-yamamoto/recursion-drill

    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

    recursion-drill/README.md at main · kazu-yamamoto/recursion-drill
  • モナドを理解する - 迷える者への手引き

    いずれにせよ、システムの状態が時間の関数であり、そのため時間は考慮しなければならない余分な要素となります。"xの値は何?"と問い合わせることは実際できません。代わりに、"時間tにおけるxの値は何?"と問い合わせなければなりません。これではコードを判断するのが難しくなり、複雑な要素が増えます。結論としては... 状態あり: ダメ! 状態なし: グッド! 式とアクション 式とは値を持った文です。たとえば以下のコードを考えてみましょう。 x = 5 y = x + 7 x = y + 1 最初のxは値が5であるという式です。最後のxは値が13であるという式です。コードは他の式も含んでいます。たとえば真ん中の行は、x + 7が12という値であるという式です。 ほとんどのコンピュータ言語では、キーボードから読み込むコマンドは式であり、その式は値を持っています。次の文を考えてみましょう。 x = ne

    モナドを理解する - 迷える者への手引き
  • いろんな言語で「Optional(2018)年」やってみよう - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    いろんな言語で「Optional(2018)年」やってみよう - Qiita
  • いくつかまとめて反論したい まず最初に言っておきたいけれども、僕自身はH..

    いくつかまとめて反論したい まず最初に言っておきたいけれども、僕自身はHaskellが大好きな関数型言語大好き人間である、ということを先に述べておきたい、それを踏まえた上で以下をお読みいただきたい 最初の「オブジェクト指向 v.s. 関数型プログラミング」や「ふたつのアプローチの比較」はまあ問題ないかなぁという感じ、問題があれば他の誰かに任せます 問題は「関数型プログラミングの利点」と「関数型プログラミングの得意分野はなにか」 「関数型プログラミングの利点」に対してまず「関数型プログラミングの利点」だけれども、ファンクタが云々、モナドが云々、これは「関数型言語の話」ではなく「Haskellの話」である そこを引いてあくまでHaskellの話だと割りきって見たとしても、「たとえばモナドを知っていれば、30分程度でパーサー(解析機)を理解することができて」? モナドはそんな限定的用途のものでは

    いくつかまとめて反論したい まず最初に言っておきたいけれども、僕自身はH..
  • DDDをHaskellで考える 業務ロジックとシステムロジック - Qiita

    DDD初心者が拙いHaskellを使って色々考える試みです。 はじめに DDDは会社で見よう見まねで1年実践したけど、DDDの勉強はほぼ一切していないくらい。 Haskellは入門書をなんとか通読できたくらい、けど普段書いてないので全然馴染んでないくらい。 それくらいの奴が1年経ってやっと「ちょっとまじめに考えてみるかぁ」って思って考えたことをまとめる記事です。 記事の主軸はDDDなので、Haskellは読めなくても雰囲気だけ察してもらえると良いな、と思います。 また、Haskellを選んだ理由はこの記事を通して伝えたいと思います。 Haskellについて この記事を読むに当たり最低限必要なHaskellの文法を記載します。 僕がDDDを捉えるに当たり用いた考え方が一番含まれる点なので、まとめてみたいと思います。 参照透過性と副作用 Haskellには「参照透過性が常に保たれる処理」と「副

    DDDをHaskellで考える 業務ロジックとシステムロジック - Qiita
    ryskosn
    ryskosn 2017/05/19
    興味深い。他の記事とあわせてあとでまた読もう
  • [増補改訂]関数プログラミング実践入門──簡潔で,正しいコードを書くために

    2016年9月24日紙版発売 2016年9月24日電子版発売 大川徳之 著 A5判/464ページ 定価3,278円(体2,980円+税10%) ISBN 978-4-7741-8390-9 Gihyo Direct Amazon 楽天ブックス 丸善ジュンク堂書店 ヨドバシ.com 電子版 Gihyo Digital Publishing Amazon Kindle honto 書のサポートページサンプルファイルのダウンロードや正誤表など このの概要 現場の方々に向け,関数プログラミングのエッセンスを厳選解説した入門書。関数型言語Haskellを用い,基から,Java 8/C/C++/Python/JavaScript/Rubyをはじめ各種命令型言語との比較,オススメの開発/設計テクニック等を平易に解説。改訂版ではGlasgow Haskell Compiler 8ならびに新機構のS

    [増補改訂]関数プログラミング実践入門──簡潔で,正しいコードを書くために
    ryskosn
    ryskosn 2016/09/15
    改訂版出るんだ。以前の版を読みきってないけれどまた買っちゃいそう。
  • コールバック地獄から async/await に至るまでと, 非同期処理以外への応用 - Object.create(null)

    継続渡しスタイル (CPS: Continuation-assing style) 例えば以下は引数として与えられた数に 1 を加えるだけの関数と, それを呼び出すプログラム. function succ(x) { return x + 1; } console.log(succ(2)); // -> 3 CPS では関数がその継続 (callback) を受け取り, 内部でその継続を呼び出す. 上の例と同じものを CPS で書くと次のようになる. function succCPS(x, callback) { callback(x + 1); } succCPS(2, x => console.log(x)); // -> 3 この例だとほぼ何の得もないが, JavaScript において CPS は, ファイルの読み込みやサーバーへのリクエストの送信, ユーザーの入力待ちなど, 非同期

    コールバック地獄から async/await に至るまでと, 非同期処理以外への応用 - Object.create(null)
  • [Haskell][F#][JavaSript][C][C++][C#][Java]微分・積分

    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

    [Haskell][F#][JavaSript][C][C++][C#][Java]微分・積分
  • いろんなプログラミング言語のアドホック多相 - Qiita

    TL;DR アドホック多相は型クラスじゃなくても実現できる。 Haskell, Rust, Scalaでは後付けで拡張できるけど、それはアドホック多相の質ではない。 アドホック多相(Ad hoc polymorphism) ウィキペディアは辞書ではないのはわかっていますが、それでも 英語WikipediaのAd hoc polymorphismのページを参考に挙げておきます。 ざっくりまとめると 型階層上は関連性のない複数の型の引数に適用できる、多相的な関数 引数の型に応じて、個別の(アドホックな)実装にディスパッチされる と、それだけのこと。 「引数の型によって別の実装にディスパッチされるって、それメソッドのオーバーロードと何が違うの」ってことなんですけど、特に違いはありません。同じです。とはいえ、プログラミング言語によって、実現方法や使い勝手は違います。そのあたりのことを、いくつか

    いろんなプログラミング言語のアドホック多相 - Qiita
  • 何故、「そのプログラミング言語」で関数型プログラミングをするのが難しいのか - Line 1: Error: Invalid Blog('by Esehara' )

    近況 未来が脅す右手の指 ナイフが滑る左手首 朦朧と過ぎる日曜日 消えた秒針 数えた生久伸 このままでいいのか 俺はお前は 迷路の中 IT'S MY WORLD ――『KOKORO WARP』SHAKKAZOMBIE 問題 多くの人々にとって、既存の慣れ親しんだプログラミング言語で、最新のスタイルを身に着けたいと思うのが人の常だと思う。今宵、流行りのスタイルと言えば、恐らく「関数型プログラミング」になると思う。 混乱を避けるために、ここで一つ定義をする。ここで言う「関数型プログラミング」の定義とは、「副作用を出来るだけ避け、関数の連続によって書くプログラミング手法」という風にする。そして、このときの「関数」とは、「ある入力に対して、一定の出力を返すもの」という風に定義することが出来る。 さて、ここで二つの主題がある。まずひとつに、「副作用を出来るだけ避ける」という点と、「関数の連続によって

    何故、「そのプログラミング言語」で関数型プログラミングをするのが難しいのか - Line 1: Error: Invalid Blog('by Esehara' )
  • 「ソフトウェアエンジニアならば1時間以内に解けなければいけない5つの問題」をHaskellでやってみた - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    「ソフトウェアエンジニアならば1時間以内に解けなければいけない5つの問題」をHaskellでやってみた - Qiita
  • 関数型言語を学ぶことは実務でどう役に立ったか - Rejasupoem

    関数型LT大会で「実社会の問題を解決する関数型言語」というタイトルで発表しました。 というのも、会社で「すごいHaskellたのしく学ぼう!」の輪読会をしていて、最初こそ10人以上の人が参加していたのだけど、章が進むごとにどんどん人が離脱していって、主催者としてはなんとか完走したいという思いがあったので、調べたのですが、 ヒアリングから、この二つの線がクロスしたときに、人は離脱するという知見が得られました。 ということで、Haskellに対して実用性を見出したいと思いながら半年を過ごしたのですが、実用的 = 仕事で使うということであれば、今の現場でHaskellに移行するのは現実的ではありません。 でも、Haskellには関数型言語のエッセンスが詰まっていて学びが多かったと思っていて、直接的には使っていないけど、概念として役立つことがあると思ったので、それを伝えるために今回文章に起こしまし

  • Haskell基礎文法最速マスター - think and error

    見ていただけるのは嬉しいですがこのエントリは十分古いため、新しい情報へアクセスをしてください。以下のをお勧めします。 すごいHaskellたのしく学ぼう! 作者: MiranLipovaca出版社/メーカー: オーム社発売日: 2017/07/14メディア: Kindle版購入: 4人 クリック: 9回この商品を含むブログを見る 関数プログラミング実践入門 ──簡潔で、正しいコードを書くために (WEB+DB PRESS plus) 作者: 大川徳之出版社/メーカー: 技術評論社発売日: 2014/11/14メディア: 単行(ソフトカバー)この商品を含むブログ (8件) を見る みんなHaskellやろうぜ!! ということで書きました。 CやJavaRubyなど他言語を知っている人は、これを読むことでHaskellの大抵のことはマスターでき…ません。 特殊な構文が多すぎて他言語との類

    Haskell基礎文法最速マスター - think and error
  • 1