タグ

haskellに関するlombrizのブックマーク (10)

  • Haskellでの合成可能なオブジェクトの構成とその応用

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

  • モナド教

    前提知識:モナド モナドを理解せずともモナド教を信ずることは出来ますが,理解していればより深く納得できるでしょう. 操作 :: 型 -> 型 は,"型"から"型"へ写す"操作"の存在を表します. モナドの文脈 m が必要とする2つの操作: return :: a -> m a で,値を保ちつつ文脈 m の中に入れ込むことが出来ます. (=<<) :: (a -> m b) -> (m a -> m b) で,「値を文脈に入った別の値へ写す操作」を「文脈に入った値を同じ文脈に入った別の値へ写す操作」に変換します. id :: a -> a は値をそのまま返す操作です. id を =<< で変換して得られる操作 join :: m (m a) -> m a で,二重に文脈に入った値を一重の文脈に入った値に戻すことが出来ます. 文脈の値から生の値を取り出す型 m a -> a を持つ操作は,一般

  • Real World Haskell の古いところ - あどけない話

    Real World Haskell の内容が古くなってきたので、どこが古いかとか、それに変わる新しいものは何とか、まとめたいと思う。 Real World Haskell―実戦で学ぶ関数型言語プログラミング 作者: Bryan O'Sullivan,John Goerzen,Don Stewart,山下伸夫,伊東勝利,株式会社タイムインターメディア出版社/メーカー: オライリージャパン発売日: 2009/10/26メディア: 大型購入: 8人 クリック: 245回この商品を含むブログ (76件) を見る 1章 始めましょう 今でも通用する。 2章 型と関数 今でも通用する。 3章 型を定義し、関数を単純化する 今でも通用する。 4章 関数プログラミング ghc に --make オプションはもう不要。 5章 ライブラリを書く 5.14節では、"runghc Setup build" の

    Real World Haskell の古いところ - あどけない話
  • Clay, CSS Preprocessor

    About Clay is a CSS preprocessor like LESS and Sass, but implemented as an embedded domain specific language (EDSL) in Haskell. This means that all CSS selectors and style rules are first class Haskell functions, which makes reuse and composability easy. Clay doesn't really use any clever Haskell tricks which makes it easy to work with, even without a lot of Haskell experience. {-# LANGUAGE Overlo

  • そろそろFreeモナドに関して一言いっとくか - モナドとわたしとコモナド

    Freeモナドはすごい。 Haskellを書いていて、「特殊化された処理を記述するモナドが簡単に作れたら便利だろうなー」と思ったことはないだろうか?簡単に作れるのである、そう、Haskellならね。 これが、純粋なFreeモナドの定義である。 data Free f a = Pure a | Free (f (Free f a)) instance Functor f => Monad (Free f) where return = Pure Pure a >>= k = k a Free fm >>= k = Free (fmap (>>=k) fm) (Functor、Applicativeのインスタンス宣言は自明なので省略) 与えられたFunctorをお互いに埋め込み合っている、という漠然とした印象で、何が嬉しいのかよくわからないかもしれない。だが、この単純さこそFreeモナドの便利

    そろそろFreeモナドに関して一言いっとくか - モナドとわたしとコモナド
  • はてなブログ | 無料ブログを作成しよう

    オマーン旅行 2024 2024年のゴールデンウィーク前半はオマーンの首都マスカットに旅行に行ってきたのでその旅の記録を書く。 GWにが子どもを実家に連れて帰るとのことで、5日間の自由時間が手に入ったので、ここぞとばかりに海外旅行行きを決めた。 なぜオマーン 5日しかなく、複数国を…

    はてなブログ | 無料ブログを作成しよう
  • Haskellで作る超コンパクト音声認識システム

    音声認識人工知能の分野の中でも独自の進化をとげた分野で,良くも悪くもガラパゴス的と言われたりします. 特に大語彙連続音声認識を実現する既存のソフトウエアは大規模かつ複雑で,音声認識の専門家でさえも全体を理解して改良を加えることは必ずしも容易ではありません.このことは近隣分野と音声認識コミュニティを分断する障壁ともなっています. しかし音声認識を実現するアルゴリズム自体は,基的には実はそれほど難解なものではありません.ソフトウエアが複雑なのは,多分に計算量やメモリ量削減のための様々な工夫やCに代表される手続き型プログラミング言語の抽象化能力の限界に起因しています. 他方,ソフトウエア工学の分野では複雑な処理をコンパクトに記述可能な次世代プログラミングパラダイムとして,純粋関数型言語が研究されています.純粋関数型言語は長らく研究段階に留まっていましたが,近年はHaskellなど実用性の高

  • 途中脱出のある反復計算 - HaHaHa!

    そのまえに もとネタは[id:Dekosuke:20100810]「breakのあるfor文をHaskellで書きなおす」という記事です. この記事に対して,直感的に[id:nobsun:20100118]の双方向畳み込みfoldで汎用的に表現できる」と思って,コメントを付けました.ところが,その後が波瀾万丈 < 大袈裟なやつ 途中脱出の例題を考えてみた. ちゃちゃっと書いたサンプルコードが途中脱出してくれない. あわてて取り消しのコメントを. どうも原因がよくわからない,上手くいくはずなのに. foldの定義の所為だと思い込む. 何人かにfoldを説明してみた. coolじゃないfoldの代替定義をでっちあげた. 代替foldリファクタリング. 代替foldを何人かに説明してみた. 代替foldでよいことは納得できる. でもやっぱり,元のfoldで上手くいかなり理由がわからない. よくよ

    途中脱出のある反復計算 - HaHaHa!
    lombriz
    lombriz 2010/08/24
    ざっと読んだけど、あとでよく読む
  • https://tryhaskell.org/

  • モナドで悟りをひらきたいのなら - 図でわかる(?)モナド - 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
  • 1