タグ

Haskellに関するterazzoのブックマーク (185)

  • モノイドと継続渡しの道具箱 - モナドとわたしとコモナド

    関数型言語Haskellにおいて、普通は計算の結果は関数の戻り値として扱うが、「結果を受け取る関数」 に渡すという継続渡しというスタイルもある。これは単なる冗長なやり方ではなく、様々な興味深い性質を持つ。 基形は、aという値を渡すところを ∀r. (a -> r) -> r のような表現にする。たとえば、与えられた数の42倍を渡したいとき、そのまま\x -> x * 42ではなく、\x f -> f (x * 42)と書く。もちろんこれだけではありがたみが分からない。 さて、与えられた文字列の中のうち、大文字のアルファベットを取り出し、それがアルファベットの何番目か計算するプログラムを作りたい。普通はリストを使ってこのように書くかもしれない。 import Data.Char uppers :: [Char] -> [Int] uppers [] = [] uppers (x:xs) |

    モノイドと継続渡しの道具箱 - モナドとわたしとコモナド
    terazzo
    terazzo 2015/03/20
    575
  • Haskellでの合成可能なオブジェクトの構成とその応用

    Haskellでの合成可能なオブジェクトの構成とその応用 木下郁章, 山和彦, 2015 Haskellで状態を管理する際は、 一般的に代数データ型や型クラスが用いられるが、 データが拡張できないか、動的な性質を持たない。 そのためHaskellは、 複雑な状態を扱う問題領域には適していないと考えられてきた。 一方で、一般的なオブジェクト指向言語では、 オブジェクトを提供することでこの問題領域で成功を収めている。 論文では、Haskellの言語仕様を変更することなしに、 オブジェクト指向言語から着想を得たオブジェクトを実現する。 論文で提案するオブジェクトは圏を構成し、合成を用いて継承を表現できる。 また、終了する運命にあるオブジェクトやストリーミングなどに応用でき、 複雑な状態を扱うゲームの実装にも使われている。 論文をダウンロード(PDF) PPL 2015 発表スライド ここに

  • https://qiita.com/minpou/items/34a67281b4b746bc5fcc

  • マルチコアでスケールするようになったHaskell | IIJの技術 | インターネットイニシアティブ(IIJ)

    Glasgow Haskell Compiler(GHC)は、関数型言語Haskellの主要コンパイラです。GHCは(並列性に加えて)並行性を主要な目的として長年開発されてきました。そのため、GHCには、 軽量スレッド(グリーンスレッド) マルチコア用の軽量スレッド・スケジューラ マルチコア上での効率的なメモリアロケータ マルチコア用のガベージコレクタ など、マルチコアで簡潔に並行性を実現するための部品が揃っています。そこで、Haskellで Web サーバなどの並行プログラムを書き、GHC でコンパイルすれば、マルチコア環境でスケールするのを期待したくなります。 残念ながら GHC 7.6.3 までは、入出力を司るIOマネージャの実装にボトルネックがあり、マルチコア環境でスケールしませんでした。エール大学のAndreas Voellmy氏と筆者は、IOマネージャの改良に取り組み、その成果

    マルチコアでスケールするようになったHaskell | IIJの技術 | インターネットイニシアティブ(IIJ)
  • Haskellによる並列・並行プログラミング

    並列・並行プログラミングはプログラマの重要な関心事であり、常に注目を集めている話題です。これまで、関数型言語は並列・並行プログラミングに有利であると言われてきましたが、それを説明する書籍はありませんでした。書では、純粋関数型言語Haskellが提供する並列・並行プログラミングの機能を俯瞰し、実践的な問題を解いていきます。その根底にある考え方は、関数プログラミングの核心であるモジュラリティです。また書では、実際の問題を解決するときに陥りがちな落とし穴や、高い性能を出すためのtipsなどをまとめています。 正誤表 ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認

    Haskellによる並列・並行プログラミング
  • Haskell の Monad とは言語内DSLのフレームワークである - あどけない話

    この記事は、Haskellを勉強してある程度分かったけど、Monadで挫折した人のための記事です。10分間で、Monadに対する納得感を得ることを目的としています。他の言語でいう「モナド」にも通用する内容ですが、Haskell の文法や用語を用いますので、他の言語の利用者に分かるかは不明です。 Haskellを勉強したのですから、 代数データ型 型クラス は分かっていることにします。Monad は、単なる型クラスの一つで、それ以上でもそれ以下でもありませんから、この二つが分かってないと話になりません。 また、言語内DSL(以下、DSLと略記)という考え方を知っていることも仮定します。Monad とは、DSLのフレームワークという直感を与えるのが、この記事の主眼ですからね。 さらに、構造化定理をいう単語を聞いてもビビらない人を想定しています。逐次、反復、分岐があれば、計算しうる計算はすべて記

    Haskell の Monad とは言語内DSLのフレームワークである - あどけない話
  • ぼくのかんがえた最強の拡張可能レコード - モナドとわたしとコモナド

    注意(2018/04) かなり古い記事なので、extensibleの最新のバージョンとはまったく互換性がない __ 動機 GHCに、OverloadedRecordFields(ORF)という拡張の導入が提案されている。 (Records/OverloadedRecordFields/Design – GHCより) Haskellのレコードの深刻な欠点は、フィールドをオーバーロードできないことだ。例えば、 data Person = Person { personId :: Int, name :: String } data Address = Address { personId :: Int, address :: String } と定義したとき、personIdはどちらを参照すべきかわからない。よくある対策としてデータ型に接頭辞をつけるという方法があるが、コードやフィールド間の関

    ぼくのかんがえた最強の拡張可能レコード - モナドとわたしとコモナド
  • ScalaプログラマのためのHaskell入門

    Scala Matsuriで話したScalaプログラマのためのHaskell入門のスライドです。Read less

    ScalaプログラマのためのHaskell入門
  • (>>=) を (>=>) に書き換える - Qiita

    綱渡りと Category (と,Kleisli) ← 前の記事 今回は少しカテゴリーの話から離れて,モナドの bind 演算子 (>>=) を (>=>) に書き換えることを考えてみます. 次の記事 → Category から Arrow へ (>>=) と (>=>)

    (>>=) を (>=>) に書き換える - Qiita
  • Haskell Relational Record をリリースしました - あどけない話

    Haskell Relational Record (HRR)尻叩き担当の山です。この記事では、HRR のリリースについて説明します。 なお、これは Haskell Advent Calendar 2014 の25日目の記事です。 HRR とは何か? HRRは、日比野さんが中心となって開発が進められている関係代数ライブラリです。Haskellで式を書くと、それがSQL文に変換され、データベースに問い合わせた結果が Haskell のレコードになります。以下のような特長があります。 抽象的:高レベルな式で表現すると、SQLが生成されます。対応している SQLサーバは、DB2、ProsgreSQLSQLiteMySQLMicroSoft SQL Server および OracleSQL です。 型安全:HRRの式を書いたHaskellのコードがコンパイルできれば、必ず正しいSQL文が生

    Haskell Relational Record をリリースしました - あどけない話
  • 計算の合成 - khibino blog

    Haskell Advent Calendar 2014 の22日目のエントリーです。 導入 Haskell では計算を持った値であることを型で表わすことができる。 とくに計算を持っていない型は Int や a のような形をしている。 しかし例えば Maybe Int ならば、結果の型 Int の値は得られるかもしれないし得られないかもしれない。 Functor f => f a なら、結果の型 a を得るためには何らかの計算 f が必要だと考える。 プログラムを書くときには結果の値を計算するにあたって、様々な計算を利用する。 複数の計算をうまく組み合わせる方法が重要だ。 計算の連続適用 型 a に計算 h を適用したものにさらに計算 g を適用し、さらに f を適用すれば f (g (h a)) である。 ここでは、どんな計算を適用するかだけを考えることにして、単に fgh の様に並べて

    計算の合成 - khibino blog
  • ハトクラモナドをごにょごにょ - モナドで問題をどう解決するか - Creatable a => a -> IO b

    ボドゲ楽しいよね。 最近、家族で遊べないかなぁと思ってドミニオンの標準パックを買ってみたところ、 わりと好評だったのでほくほくしてます。 はい、てなわけで、ちゅーんさんですおばんです。 さて、今日ははる君(@haru2036)が書いた、ハトクラのモナドの記事 http://haru2036.hatenablog.com/entry/2014/12/17/014142 を楽しく読みました。 こういう何か題材を見つけてHaskellで解決しようみたいなアプローチ、 なかなか無いので貴重です。 とても面白い題材なのですが、いくつか気になった点があったのでがばっと改善してみました。 えっ、自分の進捗ですか? それは聞かない約束です( ー`дー´)キリッ ActionPhaseの定義と役割について考えてみる そもそもモナドのなんたるかについては、 ruiccさんの「モナド入門以前」という記事がおもろ

    ハトクラモナドをごにょごにょ - モナドで問題をどう解決するか - Creatable a => a -> IO b
  • Haskellのlensの使い方 (基本) - みゆっきのにっき

    ekmett先生のlensに関して Lens'は便利に使えはするけど、Prism,Iso,Traversal,Foldみたいなのは触ったことがなかったので調べた。 Lensの利用 1 import Control.Lens して 1 2 3 4 5 6 >>> ("hello",("world","!!!")) ^. _2 . _1 "world" >>> ("hello",("world","!!!")) & _2 . _1 .~ 42 ("hello",(42,"!!!")) >>> ("hello",("world","!!!")) & _2 . _1 %~ map toUpper ("hello",("WORLD","!!!")) みたいに使う。優先順位は以下のようになっている: 1 2 3 >>> ("hello",("world","!!!")) ^. (_2 . _1) >>

    Haskellのlensの使い方 (基本) - みゆっきのにっき
  • Haskellと随伴 - Qiita

    随伴というのは2つの関手の関係のことです. $ F : \mathcal{C} \to \mathcal{D} $, $ G : \mathcal{D} \to \mathcal{C} $があったとき, 随伴$F \dashv G$ とは, 自然同型 $\hom(F\cdot,\cdot) \cong \hom(\cdot,G\cdot)$ のことです(ただしこの同型はhomの左右を同時に固定して, 2変数引数としてみて考えます). 文章で読むより図式を見たほうが早いです. コードにするのも簡単です. class Adjunction f g where leftAd :: (f a -> b) -> (a -> g b) rightAd :: (a -> g b) -> (f a -> b) -- Adjoint laws -- 1. leftAd . rightAd = id -- 2

    Haskellと随伴 - Qiita
  • HaskellでOSを作る試み - みずぴー日記

    函数型なんたらの集い 2014 in Tokyo - connpassで、前にやっていたajhcでmini-osを書いていたときの話をしてきた。 下書き せっかく書いたので発表のときの下書きをそのまま載せておく。 スライドを作るときに一部変えたり、下書きの段階では図をいれてなかったりするが、おおまかな流れは変わっていない(はず)。 自己紹介 みなさんこんにちは。地方枠で参加したmzpです。 普段は名古屋でRailsプログラマやってます。 導入 突然ですが、OSを作ってみたいですよね! プログラマたるもの1度はOSとかエディタは自作してみたくなりますよね!!そして、自作するなら当然、愛してやまない関数型言語を使いたいですよね。 そうです、この発表は関数型言語を使って自作のOSを作ろうとした話です。 整理 さて、ひとことでOSといっても様々な種類があるので、それを整理しておきましょう。 デスク

    HaskellでOSを作る試み - みずぴー日記
  • 随伴がモテないのはどう考えてもモナドが悪い!(モナドとコモナドの関係が分かる話) - Moon? Shadow! - Misc Memo

    この記事が対象としている読者 コモナドって何となく聞いたことがある人 圏論よく分かんないけど、圏の定義(対象と射と合成と恒等射と……)みたいなことは聞いたことがある人 要するに、モヤモヤしてても問題ないのですけれど、最低限の知識くらいはあった方がいいってことなのですー>ω< また、この記事は深淵なHaskellプログラマのみが書くことを許されると言われるモナドチュートリアルではないのでそういったものを期待されていたら、ごめんなさいなのです>< コモナド(´・ω・`) さて、みなさんはコモナドについてご存知です(・ω・? google:コモナド Haskellで調べると、 こもなど!コモナド!Comonad!! - capriccioso String Creating(Object something){ return My.Expression(something); } という id:

    随伴がモテないのはどう考えてもモナドが悪い!(モナドとコモナドの関係が分かる話) - Moon? Shadow! - Misc Memo
  • Yesodで作ったWebアプリをHeroku上でビルドしようとしても15分以内に終わらないときは - Qiita

    Herokuの15分ルール YesodアプリをHerokuにデプロイするというトピックを書きましたが、難関があります。 Herokuは、ビルドが15分経っても終わらないとデプロイを失敗させてしまうのです。 そして、Yesodで作ったアプリケーションは、ビルドに15分以上かかるのは珍しいことではありません・・・ ビルドサーバ「Anvil」 15分ルールに対抗するには、Anvilというビルドサーバが使えます。 heroku-buildpack-ghcのページに書いていました。 ビルドサーバはHerokuでのビルドとは関係ないので、15分ルールに縛られないようです。 ビルドサーバでのビルド〜デプロイの流れ 概ね次のような流れになります。 ビルドサーバにプロジェクトをアップロード ビルドサーバ上でビルド 2で生成されたslug(Heroku用語で、アプリ実行に必要なファイル群のこと)をビルドサーバ

    Yesodで作ったWebアプリをHeroku上でビルドしようとしても15分以内に終わらないときは - Qiita
  • IDE for Haste projects

    I finished an Elm-like IDE for Haste projects. Haste is a compiler from Haskell to Javascript. The software is at: https://github.com/agocorona/tryhplay Running in a heroku instance with a simple example: http://tryplayg.herokuapp.com/try/console.hs/edit Besides to edit-compile and run, it can also import , compile and run haste projects from git repositories (Although this, like the rest of the p

  • Haskell-rerational-recordでDB操作するのが楽しすぎる件〜その1〜 - Creatable a => a -> IO b

    どーも、いつものちゅーんさんです。 一ヶ月くらい前に、もくもくHaskell会というハッカソンで日比野さん(@khibino)とご一緒したので、 日比野さんの開発したhaskell-rerational-record(以下HRR)というライブラリを(色々教わりまくりつつ)いじいじしていました。 お仕事のちゅーんさんはわりとゴリゴリSQLを書くわけですけど、あの、あれですよ、辛いんです。 もくもく会でも日比野さんと只管愚痴りまくってましたけど、SQLとかね、こんなもの人間の書くものじゃないです。 ね? そんなわけで、Haskellを用いて如何に苦しまず楽しくRDBと戯れるか、というのが日のお題です。 HRRの特徴 基的にはSQLをモナディックに生成するためのライブラリで。 普通のアプリケーションで必要になるようなほとんどのクエリはこれだけで書く事ができます。 HRRには、ざっと次のような

    Haskell-rerational-recordでDB操作するのが楽しすぎる件〜その1〜 - Creatable a => a -> IO b
  • 米Facebook、Haskellライブラリの「Haxl」をオープンソースソフトウェアとして公開 | OSDN Magazine

    米Facebookが関数型プログラミング言語「Haskell」向けのデータアクセスライブラリ「Haxl」を公開した。リモートにあるデータベースへのアクセスを簡素化できるというもので、修正BSDライセンスで提供されている。 Haskellは関数型プログラミング言語で、ほかの言語との統合性、並行性/並列性などを特徴とし、デバッガ、プロファイラ、リッチなライブラリなどを備える。 HaxlはHaskell用のデータアクセスライブラリで、これを利用してリモートにあるデータベースやWebベースのサービスにアクセスできる。アプリケーションのコードとデータソースの間のレイヤとして機能し、同一のデータソースに対して複数の要求のバッチ処理、複数のデータソースからのデータ要求、過去の要求のキャッシュ作成などを自動で行うことで、データをフェッチするためのコードが簡潔になるという。 FacebookはHaxlという

    米Facebook、Haskellライブラリの「Haxl」をオープンソースソフトウェアとして公開 | OSDN Magazine