タグ

haskellに関するWindymeltのブックマーク (34)

  • monad.gby

    1 2012.11.18 2 1 3 2 DSL 4 5 Q) A) 6 Q) A) 7 8 9 Haskell 10 11 Parser data Parser a = Parser (String -> [(a,String)]) Parser pwrap :: a -> Parser a pwrap v = Parser $ \inp -> [(v,inp)] Parser pbind :: Parser a -> (a -> Parser b) -> Parser b pbind p f = ... string :: String -> Parser String string [] = pwrap [] string (x:xs) = char x ‘pbind‘ \v -> string xs ‘pbind‘ \vs -> pwrap (v:vs) 12 IO data IO

    Windymelt
    Windymelt 2020/10/15
    fmapの関数を2引数にすると?というところからapplicative
  • 第51回 FunctorとMonadの間にあるApplicative

    モナドとApplicativeの違い ここまで,Applicativeをモナドの代わりに使うにはどうすればいいかを説明してきました。しかし,Applicativeはモナドのすべての役割を代替できるわけではありません。Applicativeにはjoin関数や>>=演算子に相当する機能がないからです。 またApplicativeクラスのインスタンスとMonadクラスのインスタンスの間に成り立つべき法則から,Applicativeスタイルの「f <$> x1 <*> ... <*> xn」という式では,必ずx1からxnまでのすべての計算を行われます。特定の計算を条件分岐で除去することはできません。一方,モナドでは「do {b <- mb; if b then m1 else m2}」のように,条件分岐を使って特定の計算を取り除くことができます。モナドを使って書かれた処理をApplicativeス

    第51回 FunctorとMonadの間にあるApplicative
    Windymelt
    Windymelt 2020/10/14
    “Applicativeスタイルの「f <$> x1 <*> ... <*> xn」という式では,必ずx1からxnまでのすべての計算を行われます。特定の計算を条件分岐で除去することはできません”
  • 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

    Windymelt
    Windymelt 2020/10/13
    ファンクタなどの解説
  • Haskellerのためのモノイド完全ガイド | 雑記帳

    Haskellにおけるモノイドについて解説記事を書いてみた。他の言語でも通用する話があるかもしれないし、ないかもしれない。 モノイドとは モノイドとは、ざっくり言うと「くっつける」演算ができる対象のことである。例えば、文字列やリストの連結、数の足し算や掛け算は「くっつける」演算の一種である。 モノイドには「くっつける」演算の他にもう一つ条件があって、モノイドは「くっつけても何も起こらない値」を持っていなければならない。例えば、文字列の場合は空文字列、リストの場合は空リスト、数の足し算の場合は0、掛け算の場合は1、という具合である。 というわけで、文字列、リスト、数の足し算、数の掛け算はいずれもモノイドの具体例である。ただし、同じ数の集合(整数、など)を考えていても、演算が異なる(足し算 vs 掛け算)場合は、異なるモノイドとみなす。 モノイドの定義をちゃんと書くと、モノイドとは集合 \(M

  • 型システムの勉強 | 雑記帳

    型システムを自分で設計したいと思ったので「型システム入門 プログラミング言語と型の理論」(原題:Types and Programming Languages, 略して TaPL)を読んで勉強している。 この記事は私の雑な理解を吐き出したものであり、あまりまとまっていない。しかし、何かしらをアウトプットすることに意義がある(キリッ 単純型 一番基になるやつ。 Curry-Howard 対応では、命題論理に対応する。 部分型付け (subtyping) Float 型の項が必要とされる箇所に Int 型の項を投入できる、みたいなやつ。 C/C++Java といった言語でおなじみ。 Haskell には部分型付けはない…が、型適用(後述)が暗黙なので、一つの(全称型のついた)項に複数の(具体的な)型がつくことがある。これは普通は部分型付けとは呼ばない…と思う(自信なし)。 Top

  • Haskellのforallについて理解したことを書いておく(ランクN多相限定)。 - uehaj's blog

    Haskellのforallについて理解したことを書いておくyo!(ランクN多相限定*1 )。 前提知識のおさらい: 型・多相型・型検査・型推論… 最初に基概念を整理しておきます。 IntやInt->Intは単相型、aやa->aは多相型である。ここでaを型変数と呼ぶ。型変数を含む型が多相型ってわけです。 言語処理系の実装上、型という概念は型変数や型コンストラクタのツリー構造として表現される。Int,Char,[],->,(,),(,,,),IO aなどが型コンストラクタ。 a,bが型変数。組合せて(a->[Int])->[b]->(a,b)とか。::の右に書くやつです。 型は、プログラムの字面上に直接的実体がある関数や変数だけではなく、値を生じさせる部分式すべてに付随し、コンパイル時に決定されるべき情報である(値あるところに型がある。*2 )。それを決定しようというのが(静的)型検査であ

    Haskellのforallについて理解したことを書いておく(ランクN多相限定)。 - uehaj's blog
    Windymelt
    Windymelt 2020/05/18
    “forallは型スキーマ(型抽象)を表わし、型の世界のλである。”
  • 第2回 多相性(ポリモーフィズム)への理解を深める

    今回説明するテーマは「多相性」です。英語ではpolymorphism(ポリモーフィズム)になります。多態性や多様性などと呼ぶこともあります。オブジェクト指向をご存じの方ならおなじみの言葉ですね。 多相性は「ある関数や型を,複数の型に対して使用できる」という性質を示す言葉です。こうした性質を持つ関数であれば,数値計算や文字列の連結,I/O(入出力)処理など一見全く違うように見えるような処理を,あたかも同じもののように扱うことができます。 なお,この連載ではその回の理解に必要な知識は解説していきますが,すべての機能を網羅的に説明していくことはしません。Haskellについて体系的に学習したければ,入門書や「Haskell 98 言語とライブラリ 改訂レポート」(原文はLanguage and library specification)を見てください。 前回の補足 この連載では,前回の記事に関

    第2回 多相性(ポリモーフィズム)への理解を深める
    Windymelt
    Windymelt 2019/01/15
    “一方で,Numクラスで定義されている+演算子などのように,型によって変わる振る舞いを型クラスなどを通して関数に付け足すことで発生する多相性があります。これを「アドホック多相(ad-hoc polymorphism)」と呼びます”
  • 再帰のパターン - maoeのブログ

    Fun of Programming (Cornerstones of Computing)の3章「Origami programming」の冒頭にはこんな事が書かれている。 One style of functional programming is based purely on recursive equations. Such equations are easy to explain, and adequate for any computational purpose, but hard tu use well as programs get bigger and more complicated. In a sense, recursive equations are the 'assembly language' of functional programming, and

    再帰のパターン - maoeのブログ
  • ウォークスルー Haskell - Haskell 入門

    ウォークスルー Haskell たのしいモナドの世界へようこそ! 目次 Haskell について Haskell とは, Haskell の特徴, Haskell の仕様, Haskell の実装, 関連サイト 開発環境について Haskell Platform のインストール, GHC の使い方 はじめの一歩 Hello World, コメント, ブロック, レイアウト, 変数, 関数, 識別子, 多相型 基的なデータ型 データ型の紹介, 論理型, 数値型, 文字型, 文字列型, タプル型, ユニット型, リスト型, Maybe 型 式と宣言 変数の束縛, 型注釈, パターン, パターンマッチング(case 式), ガード(case 式), if 式, let 式, where 節 関数 関数の定義, 関数の型, 再帰関数, パターンマッチング(関数定義), ガード(関数定義), 高階

  • 代数的データ型と初等代数学 - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me 「関数プログラミングとはなんですか?」と問われたときには「デ,データファースト……(震え声)」と答えることが多いのだが,実際 Haskell や OCaml などの言語を特徴付けるものとして,代数的データ型 (Algebraic Data Type; ADT) の存在は無視できないだろう.その有用性ゆえに,近年では新たな言語の策定の際にその概念が輸出され,RustSwift などの言語にも採用されている. 「代数的データ型とはなんですか?」と問われたときには―問われたことがないのでわからないのだが―おもむろに ghci か utop を立ち上げて,解説を始めるのではないかと思う.ひとしきり解説をした後,「つまり直積の直和なんですよ〜🙌✨」と言って話を締めくくるだろう. int 型や float 型など,「メモ

    代数的データ型と初等代数学 - ryota-ka's blog
  • プログラミング言語探訪

    Walking Through Programming Languages Languages Standard ML Haskell Misc. About

  • Haskellで物理を殴ってレベルが上がった話 - Qiita

    事情により二日ばかし遅延評価となってしまい申し訳ありませんm(_ _)m 次元付き計算がいかに重要か 皆さん、量の計算をするうえで、単位を間違えちゃいけないよ、って教わったと思います。 180cm + 55kg = 235年  とかいう式は間違っていて、意味を成しませんよね。 間違えるとどんなことがおこるかって?テストに落ちるとかでしょうか。 1983年には、カナダ航空の飛行機が、燃料補給時に単位を間違えたために(間違いの質は、22300 kgの燃料を補給すべきところ、22300 ポンド しか補給しなかったというもの)飛行中にまさかの燃料切れに陥り、お祭り会場になっていた廃空港に緊急着陸を強いられ、あわや大惨事、というギムリ・グライダー事件が起こっています。 1999年、NASAの火星探査衛星マーズ・クライメート・オービターは、制御プログラムの力の単位にポンド重とニュートンが混在していた

    Haskellで物理を殴ってレベルが上がった話 - Qiita
  • モナドとはモナドである - モナドとわたしとコモナド

    この記事を読む前に、絶対に理解出来ないモナドチュートリアルに一度目を通してみてほしい。モナドを理解していく上で、とても重要なことが書かれている。 改めて言おう、モナドはモナドだ。コンテナだとかプログラマブルセミコロンだという説明では、モナドのすべてを正確に表せるとは言い難い。では、モナドを過不足なく説明できる、モナド以外の言葉はあるのか? 実は、モナドを表現し、かつモナドで表現される言葉は存在する。その一つは手続きである。手続き型言語の「手続き」だ。 手続きとは何か 手続きは結果を持つ おおよそすべての手続きは何らかの結果を持つ。Haskellの()、C言語のvoid、PythonのNone、Rubyのnilなども結果の一種だ。結果が出ないとしたら、そのプログラムは停止しないか、途中で異常終了するだろう。 手続きには最小単位が存在する 処理系が扱っている以上、手続きが際限なく分解できるとい

    モナドとはモナドである - モナドとわたしとコモナド
  • モナドはメタファーではない · eed3si9n

    2011-05-28 Scala界の関数型プログラミング一派を代表する論客の一人、@djspiewak が 2010年に書いた “Monads Are Not Metaphors” を翻訳しました。翻訳の公開は人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。 2010年12月27日 Daniel Spiewak 著 2011年5月29日 e.e d3si9n 訳 僕は今、約束を破るところだ。およそ三年前、僕は絶対にモナドの記事だけは書かないと自分に約束した。既にモナドに関する記事は有り余っている。記事の数が多すぎてその多さだけで多くの人は混乱している。しかも全員がモナドに対して異なる扱い方をしているため、モナドの概念を初めて学ぼうとする者は、ブリトー、宇宙服、象、砂漠のベドウィン (訳注: アラブ系遊牧民) の共通項を探す努力をするハメになっている。 僕は、この混乱した

    Windymelt
    Windymelt 2012/12/19
    これまで読んだ中で一番分かりやすい。Scala, Rubyによる巧みな例示が見事。