タグ

haskellに関するdannのブックマーク (50)

  • Haskell から見た node.js - あどけない話

    誤訳 以前、「サーバサイドJavaScriptのNode.js、最初はCやHaskellを検討し失敗。開発者ライアン・ダール氏へのインタビュー」という記事が twitter で話題になっていました。 ―― なぜJavaScriptを選んだのでしょう? ダール氏 実は最初は違いました。最初はC、Lua、Haskellなどで失敗していました。そんなときV8(Chromeが採用しているJavaScriptエンジン)に気がついて、やろうとしていることに対してJavaScriptが完璧な言語だと突然ひらめいたのです。 ただでさえ、Haskell は遅いと誤解されているのに、このような悪意さえ感じらえる訳だと、さらに誤解が深まりそうです。原文にはこう書かれています。 Dahl: Originally I didn’t. I had several failed private projects doi

    Haskell から見た node.js - あどけない話
    dann
    dann 2011/08/25
  • http://mew.org/~kazu/material/2011-haskell.pdf

    dann
    dann 2011/08/15
  • 状態モナド遊び - あどけない話

    状態をモナドで実現する方法を考えます。 リスト 例は簡単な方がいいので、データ構造として Lisp 風のリストを定義しましょう。 data List a = Nil | Cons a (List a) deriving Show リストは、こんな風に表せます。 Cons "c" (Cons "b" (Cons "a" Nil)) Lisp 風の cons も定義してみましょう。 cons :: a -> List a -> List a cons x xs = Cons x xs cons "c" $ cons "b" $ cons "a" Nil → Cons "c" (Cons "b" (Cons "a" Nil)) 状態を持つリスト さて、この Lisp 風のリストに、要素の数を覚えさせておきたいとしましょう。もちろん、数えれば分りますが、数えなくても一瞬で分るようにしたいのです。

    状態モナド遊び - あどけない話
  • HUnitを使ってみた(ついでにHLintも) - 岩本隆史の日記帳(アーカイブ)

    HaskellのユニットテストフレームワークであるHUnitを使ってみました。テスト対象のコードは、先日書いたsign関数です。 HUnitのインストール なにはともあれ、まずはHUnitをインストールしました。Cabalのおかげで簡単に入れられました。 $ cabal install HUnit テスト対象コードのモジュール名検討 つづいて、テスト対象コードのモジュール名を何にするか検討しました。このモジュールは「キープリスト」というWebアプリケーションで使う予定であり、AmazonAPIに関わるものなので、「KeepList.Amazon」に決めました。 ファイル構成の検討 つづいて、テスト対象コードとテストコードをどのように配置するか検討しました。モジュール名の名前空間の階層をそのまま生かし、テストコードを「tests」ディレクトリに入れることに決めました。 $ tree . |

    HUnitを使ってみた(ついでにHLintも) - 岩本隆史の日記帳(アーカイブ)
    dann
    dann 2010/07/19
  • Haskell PVP Specification

    Haskell Package Versioning Policy🔗 Rationale🔗 The goal of a versioning system is to inform clients of a package of changes to that package that might affect them, and to provide a way for clients to specify a particular version or range of versions of a dependency that they are compatible with. Cabal provides the raw materials for versioning: it allows packages to specify their own version, and

    dann
    dann 2010/04/04
  • JOI 春合宿の講義資料 - 純粋関数型雑記帳

    id:iwiwi さんからご紹介に与りまして、JOI春合宿にて講義をさせて頂きました。テーマはなんでも良いとのことでしたので、関数プログラミング入門ということで話させて頂きました。スライドを以下に公開しております。 関数プログラミング入門View more presentations from tanakh. 聴いて頂いた皆さま、拙い講義ではありましたが、どうもありがとうございました。二時間も頂けるとのことだったので、あれもこれも話したいとなって、まとまりのない発表になってしまった感が否めませんが、少しでも関数プログラミングの魅力が伝われば幸いです。関数プログラミング入門ということで、関数プログラミングを全く知らない人をターゲットに作りましたが、少々無理があったかもしれません。私はネルー値が1を切らないとなかなか準備に取り掛かれなくて、当日は準備不足で資料のミスも目立ったし、資料の退屈さを

    JOI 春合宿の講義資料 - 純粋関数型雑記帳
    dann
    dann 2010/03/30
  • Advanced Functional Programming

    Work in progress The lectures below are step by step migrated from the previous course instance (labelled "2009:" below) to the current 2010 instance. Lecture 1 - Course Intro and Haskell Recap Mon study week 1, 13.15 - 15.00 in EF In this lecture we do a quick recap of Haskell and talk about things like referential transparency, laziness, and type classes. We also look at a first simple example o

    dann
    dann 2010/03/15
  • 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
  • 第28回 例外やエラーに対する処理能力を加えるエラー・モナド

    Haskellの例外処理は,IOやSTMといった特定のモナドの内部でのみ扱えるようにデザインされています。しかし,こうした制限が行き届くのは,あくまで例外を捕捉し処理する場面に限られます。例外やエラーの発生する個所自体はこうした制限にはとらわれません。ありとあらゆる場所で発生する可能性のある例外やエラーに対する処理を,より統一的に扱うにはどうすればよいでしょうか? この問題に対する解決策として,第15回で説明したモナド変換子を利用できます。利用できる範囲はあくまでモナドの内部に限られますが,特定のモナドでしか例外を扱えないことと比べれば一歩前進でしょう。今回はモナド変換子を利用する2種類の方法を紹介します。 成功時と失敗時の情報を保持するEither型 第5回では,失敗する可能性のある計算結果を表すのにMaybe型を利用できることを説明しました。Maybeに対してモナドを定義することで,失

    第28回 例外やエラーに対する処理能力を加えるエラー・モナド
    dann
    dann 2010/01/21
  • JavaプログラマのためのIOモナド - kmizuの日記

    特に説明はしません。IOモナドなんて言っても、別に難しいことではなく、結局やってる事はこんな感じですというのがわかってもらえれば。もちろん、実際のHaskell処理系がこのような実装になっているという意味ではなく、JavaプログラマはこのようなイメージでIOモナドを理解すればいいのではないかという提案に過ぎないので、その点は注意してください。 package iomonad; import java.util.Scanner; public class IOLib { enum Unit{VALUE};//一つしか値を持たない型 public static Unit UNIT = Unit.VALUE; /** * HaskellのIO 'a型に相当 */ public interface IO<A> { /** * IOを「実行」して、A型の値を得る処理. * ユーザが直接呼び出すと参照

    JavaプログラマのためのIOモナド - kmizuの日記
    dann
    dann 2010/01/18
  • 制約プログラミングのススメ - あどけない話

    IIJ 社内でやったチュートリアル 純粋関数型言語Haskellの紹介 〜制約プログラミングのススメ〜 の資料を公開しました。

    制約プログラミングのススメ - あどけない話
    dann
    dann 2010/01/16
  • モナドで悟りをひらきたいのなら - 図でわかる(?)モナド - Pixel Pedals of Tomakomai

    圏論の最大の武器はダイアグラムなので、モナドで悟りをひらきたいのならダイアグラムを使えばいいんじゃないでしょうか。 ダイアグラムの書き方 例えば、「 f :: a -> b 」とか「length :: [a] -> Int」は以下のように書きます。型を点で、関数を矢印で書きます。 ダイアグラムの利点は、fやlengthの中身を忘れて簡略化することができることです。人間の脳ができることには限りがあるので、注目する情報が少ない方が理解しやすくなるってスンポーです。 なお、 合成 g . f は図示する時に順が逆になるので気をつけて下さい。これは、合成関数の適用が g ( f x ) と書けることに由来してます。まずfを適用し、次にgを適用するということです。 return と >>= の図示 今回のダイアグラムの約束として、元となる型(Bool, Char, Int 等)は最下段に書きます。そ

    モナドで悟りをひらきたいのなら - 図でわかる(?)モナド - Pixel Pedals of Tomakomai
  • 「モナドは象だ」の翻訳まとめ - Fight the Future

    とてもエントリが多くの回にわたったので、まとめます。 One Div Zero: Monads are Elephants Part 1 モナドについて調べていく(7) - Fight the Future じゅくのblog モナドについて調べていく(8) - Fight the Future じゅくのblog モナドについて調べていく(9) - Fight the Future じゅくのblog モナドについて調べていく(10) - Fight the Future じゅくのblog モナドについて調べていく(11) - Fight the Future じゅくのblog モナドについて調べていく(12) - Fight the Future じゅくのblog One Div Zero: Monads are Elephants Part 2 モナドについて調べていく(14) - Fig

    「モナドは象だ」の翻訳まとめ - Fight the Future
  • Haskell の State モナド (1) - 状態を模倣する

    昔、モナドがよくわからなかったので、さまよっていたら、 … ネットで見たMonadの説明で一番私がわかりやすいと思ったのは、Wikibooksの説明。Hello World!がブラックボックスな人は、是非一読を。 (404 Blog Not Found:Haskellで一番難しいのは より) 最初にこの Wikibooksの説明 を読んだのは去年の 11 月頃。そのときの文書のバージョンは  05:13, 27 October 2008 で、今は内容が随分増えている。前の文書は、現在の Haskell/Understanding monads/State に相当するようだ。 ところで、上記の解説を最初読んだとき全く意味がわからなかった。 (@_@;) 「3 Stateful Computations」 では、「ランダムな数字を生成する関数」を例に挙げてモナドの説明がされていたけれど、何が言

    Haskell の State モナド (1) - 状態を模倣する
  • Haskellでtry/throw/catch/finally - あどけない話

    Haskellで実装する関数の多くでは、いわゆる Java の try/throw/catch/finally は必要になりません。しかし、IO が絡んでくると話は別です。異常な状態に陥ったら、throw してトップレベルに戻る方が、コードがすっきり書ける場合があります。 Java で言う try/catch Haskellを勉強していると、すぐにcatchが見付かります。catch はプレリュードで定義されていて、以下のような型を持っています。 catch :: IO a -> (IOError -> IO a) -> IO a 第一引数のアクションの中で例外が生じると、第二引数の関数が補足します。つまり、第二引数が Java でいう catch ブロックにあたります。こういう風に使います。 catch 何らかのアクション (\e -> 何らかの例外処理) 昔 Monadius を読んだ

    Haskellでtry/throw/catch/finally - あどけない話
    dann
    dann 2009/08/20
  • Reddit - Dive into anything

    Advertisement �� �U Get the Reddit app Scan this QR code to download the app now Or check it out in the app stores

  • Inemuri nezumi diary(2009-05-29)

    _ ふつうでない Haskell の学び方:なぜ「遅延する」関数型言語は重要か John Hughes の書いた "Why Functional Programming Matters" という、とても魅力的な文章があります(邦訳は nobsun がしてくださいました 『なぜ関数プログラミングは重要か』)。 この文書のなかで、 John は「遅延評価」がプログラムのモジュール化に貢献することを述べています。また、アルゴリズムを遅延的に書くことで実行効率があがることもあるということを指摘しています。 ところで、一方でこういう有名なプログラミングに関するジョーク(にしては、とても気合が入っている)をご存知の方もいることでしょう : "The Evolution of a Haskell Programmer", Fritz Ruehr, Willamette University,2001-0

    dann
    dann 2009/05/30
  • 型レベルプログラミングの会 - d.y.d.

    15:08 09/04/28 Mergesort 「集合」を明示的に値とするアプローチ [1] [2] だと、「同順の要素の並びはどちらでもいい」ソートアルゴリズムは、 全ての可能なソート順の集合を返すことになると思います。 -- msort_one xs = one_of (msort xs) msort [] = {[]} msort xs = let (ys,zs) = split xs in {merge xs' ys' | xs'∈msort xs, ys'∈msort ys} where merge ys [] = {ys} merge [] zs = {zs} merge (y::ys) (z::zs) = if y<z then {y::ws | ws ∈ merge ys (z::zs)} else if z<y then {z::ws | ws ∈ merge (y::

    dann
    dann 2009/04/21
  • 正規表現を超える - あどけない話

    まずは、Audrey さんが言った Haskell の殺し文句を思い出して頂きたい。 正規表現ベースのパーサはメンテナンスしにくいのに気づいた? Parsec を使って 15分で Perl6 の完全なパーサを書く方法を勉強しましょう。 15分というのは誇張が入っていると思うが、正規表現が保守しにくく、Haskell の Parsec は強力で保守し易いのは事実だ。その理由を Perl と Haskell のコードを示しながら説明してみたいと思う。 Perl を愛する方に:この記事は Perl を攻撃するために書いたのではない。Perl を選んだのは、正規表現を広めた言語であり、僕がそれなりに Perl のコードを書けるためである。この記事の目的は、正規表現よりも関数型パーサー(Parsec)の方が優れていると示すことだ。 例題 この記事では例題として、IPv4 アドレスを解析する関数を書く

    正規表現を超える - あどけない話
    dann
    dann 2009/03/12
    parsec
  • Former Staff - School of Computing - University of Kent

    (You may have been redirected to this web page if you were trying to locate material published by a former member of the department.) Staff are asked to provide follow-on email address and web site details using this form so that they can be contacted once they have left the university. This information is listed below (where available). Former staff are encouraged to help us keep this information