タグ

haskellに関するVoQnのブックマーク (78)

  • tim philip williams :: Fixing GADTs

    This post was originally titled “Generic recursion schemes for GADTs using fixed points of higher-order functors” – but that doesn’t really explain why one would go to all the trouble of writing code this way. The answer, of course, is that we obtain various proofs of correctness embedded within our static types. For example, we have a proof that our traversals are correct and that our syntax AST

    VoQn
    VoQn 2018/03/02
    GADTsを使ってある言語の表現型を二階のFunctorとするHigherOrderFunctor とすることで便利に評価器から型推論機、プリティプリントを同じスキームで取り扱えるようにする手法。
  • adventures in uncertainty: Recursion Schemes, Part II: A Mob of Morphisms

    2015-08-25 On the last episode of this very-infrequently-updated analysis of Programming with Bananas, Lenses, Envelopes, and Barbed Wire, we took a look at how to represent and traverse nested structures. This time, we’ll start getting into the meat of the paperBy “meat of the paper”, I mean “the first two pages”. Have patience. . We’ll define four simple recursion schemes, explore how they relat

    VoQn
    VoQn 2018/02/28
  • adventures in uncertainty: An Introduction to Recursion Schemes

    2014-02-15 In 1991, Erik Meijer, Maarten Fokkinga, and Ross Paterson published their now-classic paper Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire. Though this paper isn’t widely known outside of the functional programming community, its contributions are astonishing: the authors use category theory to express a set of simple, composable combinators, called recursion sch

  • Adding source positions to AST nodes for free

    Adding source positions to AST nodes for free My main problem with writing posts in this blog is that I might end up writing about a thing which is already known to everyone and well-documented elsewhere, and I've just failed to find it. Having said that, this post describes one trick which I didn't know about before I've discovered it myself. Let's implement a simple "programming language", which

    VoQn
    VoQn 2018/02/11
    ASTの構造にメタ情報を、元のデータ構造からできるだけ変えずに付与するのに不動点コンビネータ使う手法。やってみて理解はできた。
  • Haskellで抽象構文木 (AST) にメタデータを付与する - Hash λ Bye

    2018-01-04 追記: ここで全部語り尽くされている気がしたので、Labelling AST Nodes with locations なにもこんなブログ読むことはないのかもしれない。 megaparsecを使って構文解析器を書いている。 構文解析やっているとASTにソースファイルの位置情報とかをメタデータとして乗せたくなるが、 どんな感じで実装するのか調べた。 僕自身はどのアプローチをとるのか決まっていない。 問題 やりたいこと megaparsec, parsecなどのコンビネータライブラリはジェネレータ系のalex + happyと比べると幾分まともなエラーメッセージを吐くようになっている。(alex + happyがえげつないほどterseなだけ) しかし、構文解析が終わった後のα変換によるshadowingの回避や型推論のフェーズでコンパイラがエラーを見つけた場合に、 その

    Haskellで抽象構文木 (AST) にメタデータを付与する - Hash λ Bye
    VoQn
    VoQn 2018/01/05
    ここ半年知りたかったアプローチが纏められててありがたい
  • Haskell入門という本を書きました - 北海道苫小牧市出身の初老PGが書くブログ

    Haskell入門 というを書きました。まだ店頭で買うことはできませんが、amazonでは予約を開始しています。また、電子版も早いうちに出ると聞いているので、そちらもあわせてお求め下さい。技術評論社さんのサイトではサンプルのpdfも読むことができます。 Haskellには すごいH というとても良い教科書がすでにありますが、「アプリケーションを作って楽しむ」という観点から書かれたも欲しいなということを常々感じていました1。すごいHでHaskellの考え方やプログラムの組み方は学べますが、例えば、プロジェクトを作成して開発を始めるにはどうするかであったり、必要なライブラリをどこから探してどのように自分のプロジェクトへ組み込むのかといった、開発に必要な基的な事項は自分で学ぶ必要があります。今回執筆した Haskell入門 ではとにかくHaskellでアプリケーションを作ることにフォー

    Haskell入門という本を書きました - 北海道苫小牧市出身の初老PGが書くブログ
    VoQn
    VoQn 2017/09/18
    アプリケーション作るって軸での本は欲しかったですね
  • Haskell コンパイラを書こう!

    この記事では、私が Haskell コンパイラを Haskell で書いてみたいと思って勉強した事柄を紹介したいと思います。 Haskell は多くの特徴をもった高水準言語であるため、Haskell コンパイラが行わなければならない仕事はたくさんあります。 しかし、それらを一か所にまとめて述べた教科書のようなものは見当たらなかったので、 結構たくさんの文書を調べてまわる必要がありました。 ここで、それら全てについて詳しく解説するには、 紙幅も私の能力も足りませんが*1、 簡単な紹介と参考文献へのリンクを示しておけば、多少の価値はあるのではないかな…、あればいいな、 と期待しています。 コンパイラに限らず、そこそこの規模のプログラムを作ろうとする場合には、 最初のマイルストーンとなるようなサブ目標を決めるのが良いように思われます。 有名な Wnn における「私の名前は中村です」のようなやつ。

    Haskell コンパイラを書こう!
  • Home

    このページは What I Wish I Knew When Learning Haskell 2.2 の日語訳です。 (Haskell の勉強中に僕なら知りたいこと) スティーヴン=ディール (@smdiehl) 全てのコードのソースはここにあります。誤りやより分かりやすい例があれば、Github にプルリクエストを気兼ねなく出してください。 これは第3草案です。 ライセンス このコードとテキストはパブリックドメインに捧げられています。この作品の複製、改変、頒布、実演には、商業目的であったとしても、許可を取る必要はありません。 更新履歴 (2.2) 追記・大きい変更のなされた節: 反駁不可パターン Hackage 網羅性 スタックトレース 遅延性 型システム(スコーレム・キャプチャ) (他言語)関数ポインタ attoparsec (インラインの)Cmm IO と ST(PrimMona

    Home
    VoQn
    VoQn 2016/12/14
    GHCのマニュアル日本語訳と合わせて本当にお世話になってます (まだ翻訳してないのは公式本家で見てる)
  • 有理数とか有限体とかのはなし - Qiita

    一部間違いがあります、文中でも明記しましたが最初の終了条件はInt を覆っていません。 最後に訂正したバージョンとより厳しいquickCheck の結果も載せておきました。 Haskell Advent Calendar 2016 の10日目です。 去年は眺めているだけだったので今回枠取れたの嬉しいです! レベル分け的にはAdvanced Beginner の一人が同じくらいのレベルの人に向けて書いてるつもりです、やや内容に初等整数論が含まれます。 あわよくばより詳しい人にトンテンカンカンと直していただきたい感じですが。 モチベーション 電卓などで(1/3) の計算をした後、答えに3 を掛けたことがある人、そしてそのとき1 に戻らなかった経験ある人もきっと多いことだと思います。 今回の話はそれにちょっと関係している、かもしれません。 今回は体を取り上げます、体と言うのはいわゆる四則演算に

    有理数とか有限体とかのはなし - Qiita
    VoQn
    VoQn 2016/12/10
    すごく良かった
  • Haskell環境構築_20151226_最新版_4_投稿済み_stack-1.0.0対応版.md - Qiita

    もうcabalを使う必要はないしcabal hellも無いんだ…… コンパイルしたバイナリも使い回せて世界は平和になるんだ…… 1. stackを入れる コンパイル済みバイナリをダウンロードしてパスを通す他に、 windowsにはインストーラ、macにはhomebrew、大抵のlinuxディストリビューション1にはリポジトリ等が用意されているので、以下を参考にお好きな方法でインストール Install/upgrade — stack documentation bash/zsh用に補完も用意されているので、好みに応じて Shell Auto-completion — stack documentation 2. ghcを入れる stackが最新のlts-haskellに対応したghcを入れてくれる。 $ stack setup Run from outside a project, usi

    Haskell環境構築_20151226_最新版_4_投稿済み_stack-1.0.0対応版.md - Qiita
    VoQn
    VoQn 2015/10/13
    ここ2年でだいぶ雰囲気変わったんですね
  • cabalでビルドをカスタマイズする - yunomuのブログ

    cabalファイルだけでは足りない事がある。どうしても単一のプログラムではできないこともあるし、TemplateHaskellでも生成できなくてやむなくソースコードを自動生成するスクリプトを書かざるを得ない事もあります。自動生成なんかやると何かに負けた気分になりますが、cabalでなければ普通にやっている事なので、何も問題は無い気がします。MakefileとかAntとか。 具体的には、 (1) Haskell製コード生成プログラムをビルド (2) シェルスクリプト経由でコード生成プログラムを実行 (3) 体のプログラムをビルド という事をやりたい。 ところがcabalには直接的に外部のコマンドを実行してビルドする方法が無いみたいです。無いみたいなんですが、ビルドを細かく制御する方法はいくつか用意されています。 (A) Build-Type: Configureでautoconfで頑張る

    cabalでビルドをカスタマイズする - yunomuのブログ
  • http://looprecur.com/blog/gpu-programming-in-haskell/

    http://looprecur.com/blog/gpu-programming-in-haskell/
    VoQn
    VoQn 2014/10/21
    こんなに何してるか読めないHaskellコード初めて見た(GPUプログラミングってどうしてもそうなるのかな)
  • Reactive-banana - HaskellWiki

    Reactive-banana is a library for Functional Reactive Programming (FRP). FRP offers an elegant and concise way to express interactive programs such as graphical user interfaces, animations, computer music or robot controllers. In particular, it promises to avoid the spaghetti code that is all too common in traditional approaches to GUI programming. The goal of the library is to provide a solid foun

    VoQn
    VoQn 2014/10/06
    “Functional Reactive Programming” のマスコットキャラクター、いたんだ
  • Stackage Server

    Stable Haskell package sets A distribution of compatible Haskell packages from Hackage that build together Stackage is a community project: how to add packages to Stackage stack makes using Stackage easy Latest releases per GHC version Stackage Nightly 2024-01-12 (ghc-9.8.1), today LTS 22.5 for ghc-9.6.3, published 4 days ago LTS 21.25 for ghc-9.4.8, published 4 weeks ago LTS 21.21 for ghc-9.4.7,

    VoQn
    VoQn 2014/09/26
    cabalのremoto-repoの参照先をこちらに乗り換えてみた
  • Haskell++

    VoQn
    VoQn 2014/09/19
    OOPハスケルという例。Parsec の "Mondrian language" でオブジェクト指向Haskellっていう派生があった事を知った
  • Comparing AVL Trees in C++ and Haskell

    This post compares the runtimes of AVL tree operations in C++ vs Haskell. In particular, we insert 713,000 strings from a file into an AVL Tree. This is a \(O(n \log n)\) operation. But we want to investigate what the constant factor looks like in different situations. Experimental setup: All the code for these tests is available in the github repository. The C++ AVL tree was created in a data str

    VoQn
    VoQn 2014/09/17
    AVL木の実装でCPU1コアだと負けたけどParallel使って4コア並列化させたらC++の実装よりもハイパフォーマンスにできたぜ的な話
  • BestFreeCams.club - Only the Best Free Live Cams

    VoQn
    VoQn 2014/09/08
    Google製Haskell採用例だ
  • GHCのこと

    オブジェクトレイアウト 通常のHaskellの値(代数的データ型および関数)と、未評価の計算を表すサンクは、全てポインタで参照される。ポインタが指す先は通常はヒープ上のオブジェクトだが、静的セクションに置かれていることもある。いずれにしてもレイアウトは同じで、以下の一般形をとる。 オブジェクトの先頭1ワードは静的領域へのポインタ(infoポインタ)で、この値を評価(関数なら適用)するためのコード(entry code)と、このオブジェクトの種類に関する情報を集積したレコードを指している。なお、GHCにおける1ワードはポインタと同じ大きさ、つまり32ビットOSなら32ビット、64ビットOSなら64ビットである。これはIntの精度と同じでもある。 代数的データ型 代数的データ型の評価済みの値では、infoポインタが構築子の種類を表し、その後に構築子の引数を入れるスロットが続く。したがって、N引

    VoQn
    VoQn 2014/09/01
    GHCがHaskellコードをどうやって最適化するかについて。GHCはHIRとしてCore言語に変換してからSTG言語に変換している
  • Haskell/カリー=ハワード同型 - Wikibooks

    カリー=ハワード同型(Curry-Howard isomorphism)は数学の一見無関係に思えるふたつの領域、型理論と構造論理を結びつける実に驚くべき関係である。 導入[編集] これよりカリー=ハワード同型は単に C-H と表記する。C-H が示しているのは、定理の質を反映するような型を構築し、それからその型を持つ値を見つけさえすれば、どんな数学的定理をも証明することができる、ということだ。これは最初は極めて不思議に思える。型と定理にどんな関係があるというのだろうか?しかしながら、以下に述べるように、このふたつは非常に近しい関係にあるのである。はじめる前に簡単に注意しておくが、導入の章では error や undefinedのような 表示的意味論 が ⊥ である式の存在は無視する。これらはとても重要な役割を果たすのだが、これらについては後ほど別に考えることにする。また、unsafeCo

    VoQn
    VoQn 2014/08/30
    Wikipedia のカリー=ハワード同型の説明よりも分かりやすかった
  • Haskell/Denotational semantics - Wikibooks

    導入[編集] この章ではHaskellプログラムの意味がどのように形式化されるかという表示的意味論(denotational semantics)を説明します。「square x = x*x というプログラムの意味は、数をその平方数に写す数学の平方関数だ」ということを形式的に規定することはつまらないことにみえるかもしれませんが、それでは f x = f (x+1) のような無限ループするプログラムの意味はどうでしょうか? 以下ではまずこの疑問に対するScottとStracheyのアプローチを例示し、概して関数プログラムの、特に再帰的な定義の正しさについて論じる基盤を得ることにしましょう。もちろん、これらのトピックではHaskellプログラムを理解するために必要なものに集中します。[1] この章の他の狙いは、ある関数がその引数を評価する必要があるかどうかというアイディアを捉えた正格と遅延の概

    VoQn
    VoQn 2014/08/30
    _|_ の読み方いつもわかんなくて苦労してた。ボトム型って呼ぶのか