タグ

Haskellに関するyuroyoroのブックマーク (112)

  • Operationalモナドをゲームに応用した話 - モナドとわたしとコモナド

    データを処理することは、プログラミングのもっとも質的な部分である。数値、文字列、あるいはデータの集まりなどを扱うために、数々の構造が考えられてきた。Haskellにおいては、「手順」もデータとして扱うことができる。これは、DSLを作るうえで非常に有用であり、ゲーム開発やデータベース操作……手続きがかかわるあらゆるものに応用できるだろう。 手順をデータとして扱う方法として、FreeモナドとOperationalモナドがある。ここでは、Operationalモナドをゲームのキャラクターの制御に用いた例を紹介する。Freeモナドの導入については、Andres Löh氏のHaskell eXchange 2013の講演がわかりやすく、おすすめである。 データを作る アクションゲームの敵の動きとして、この二つを考えよう: 待機 接近(攻撃) 索敵(プレイヤーの位置を調べる) EnemyMというモナ

    Operationalモナドをゲームに応用した話 - モナドとわたしとコモナド
  • Catra's diary

    _ hsenv について Haskell 環境をローカル(プロジェクト毎)に生成するコマンド hsenv <URL:http://hackage.haskell.org/package/hsenv>。 rbenv & ruby-build を調べたのはついでで、実際はこちらが先。 hsenv は python の virtualenv を参考に作ったとあり、似たようなものに rvm があるなあ、 と見てみると最近は rbenv の方が好まれているらしい。 ということで調べてみたら、結構おもしろかったのでまとめてみた。 hsenv は、最初は rbenv のように ghc の各バージョンや、ghc 以外の Haskell を切り替えて使えるようなツールかと思っていたが、 どちらかというと cabal-dev に近く、 hsenv コマンドを実行したカレントディレクトリに .hsenv/ を生

  • An Introduction to Cabal sandboxes

    Tags: haskell, gsoc. This post describes sandboxes, a new feature of cabal that will be present in the 1.18 release. Sandboxes allow to build packages in isolation by creating a private package environment for each package. If you are familiar with Python’s virtualenv or Ruby’s RVM, this is a Haskell analogue. Though 1.18 is still not out yet, you can already experiment with the new features by bu

  • From zero to cooperative threads in 33 lines of Haskell code

    Haskell differentiates itself from most functional languages by having deep cultural roots in mathematics and computer science, which gives the misleading impression that Haskell is poorly suited to solving practical problems. However, the more you learn Haskell more you appreciate that theory is often the most practical solution to many common programming problems. This post will underscore this

  • HaskellでWebAppの開発に必要なN個のこと - maoeのブログ

    あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずHaskellについて知っていることを書いた。 ← ここまで引用。 パッケージマネージャ Cabal 1.18を使おう。以上。 アプリケーションサーバ WSGIとかRackとかの流れでHaskellでもwebアプリのサーバインタフェースを統一化する動きがいくつかあった。その中で一番市民権を得たのはwaiと呼ばれるものだ。 ただ、残念なことにHaskell界でここ数年ずっと続いているI/Oストリーミングライブラリ戦争の決着がついていないため、統一化の状況は思わしくない。waiはconduitというライブラリに依存しているが、フレームワークによっては別のI/Oストリーミングライブラリを基盤にしている。 現状の3

    HaskellでWebAppの開発に必要なN個のこと - maoeのブログ
  • Extensible Effects はモナド変換子に対する救世主になり得るか?

    Extensible Effects はモナド変換子に対する救世主になり得るか? konn-san.com Oleg, Sabry and Swords らによる Extensible Effects: An Alternative to Monad Transformers の論文を読んだメモ的な何かです。モナド変換子に関する簡単な現状確認から入ってはいますが、想定読者層は日常的にモナドやモナド変換子を用いたプログラムを書いている人達です。 どちらかというと自分向けのメモの性格が強いので、詳しい部分は論文を参照してみてください。 背景:モナド変換子とその問題 Haskell を中心に、関数型言語では副作用のある函数を合成するための手段としてモナドが広く用いられている。モナドは非常に強力な抽象化で、およそ副作用と呼べるものはモナドを使って定式化することが出来た。例えば、大域的な環境 r を

    Extensible Effects はモナド変換子に対する救世主になり得るか?
  • The Expression Problem - maoeのブログ

    この記事はHaskell Advent Calendar jp 2010 : ATND向けに書いたものです。 最近、ふらふらとネットの波をさまよっていたら、Channel 9でRalf LaemmelさんがHaskellの型クラスを解説する動画を見つけました。これです。 C9 Lectures: Dr. Ralf Lämmel - Advanced Functional Programming - The Expression Problem | Going Deep | Channel 9 C9 Lectures: Dr. Ralf Lämmel - Advanced Functional Programming - Type Classes | Going Deep | Channel 9 The Expression Problemと呼ばれるプログラミングにおける古典的な問題をネタに

    The Expression Problem - maoeのブログ
  • Haskellの言語拡張たち - rfなブログ

    前回、なんか拡張を沢山使っていたが、おまじないのままなのもそろそろまずい感じなので、とりあえず調べてみた。 今回調べた拡張 型系 GADTs ScopedTypeVariables EmptyDataDecls TypeFamilies 型クラス系 MultiParamTypeClasses TypeSynonymInstances FlexibleInstances FlexibleContexts パターン系 BangPatterns PatternGuards ViewPatterns 文字列系 OverloadedStrings TemplateHaskell系 TemplateHaskell QuasiQuotes import系 ImplicitPrelude PackageImports 他言語系 CPP ForeignFunctionInterface 参考にしたところ L

    Haskellの言語拡張たち - rfなブログ
  • Haskell: Using CmdArgs (Single and Multi-Mode)

    I use the CmdArgs module all the time for all of my personal Haskell projects. CmdArgs is really the one-stop solution for all of your command-line option handling needs. Its “killer” feature is the ability to support multi-mode options (e.g., “myprog mode1 [mode1 options]”, “myprog mode2 [mode2 options]”, etc.). Unfortunately, not many people know about CmdArgs, it seems. So, I’m writing this pos

    Haskell: Using CmdArgs (Single and Multi-Mode)
    yuroyoro
    yuroyoro 2013/06/11
    CmdArgs高機能だな
  • モナドトランスフォーマー・ステップ・バイ・ステップ(Monad Transformers Step By Step) - りんごがでている

    著者のMartin Grabmüller氏に許可をいただきましたので、 Haskellモナドトランスフォーマーのチュートリアルを翻訳したものを公開します。 タイポや誤訳、プログラムのミス等ありましたら、 Twitter宛@bicycle1885かコメント欄までご連絡頂けるとありがたいです。 元のテキストやプログラムは以下のリンクから得られます。 Monad Transformers Step by Step [2012/12/19] 誤りを多数訂正しました。id:qtamakiさん、ありがとうございます。 [2014/6/19] 誤りを2点訂正しました。id:daimatzさん、id:hitotakuchanさん、ありがとうございます。 Monad Transformers Step by Step Martin Grabmüller Oct 16 2006 概要(Abstract) この

    モナドトランスフォーマー・ステップ・バイ・ステップ(Monad Transformers Step By Step) - りんごがでている
  • Haskell Tips (文字列編) - りんごがでている

    この記事はHaskell Advent 2012のための記事です。(遅れてすいません(ヽ´ω`)) Haskellで実際にプログラムを書く上では、様々なパッケージにある型や関数を利用するのが不可避になります。 そういった便利ツールのうち文字列まわりについて調べたところを、Haskell最近始めたって人に紹介するのがこの記事の目的です。Haskell詳しい方には新しい発見は無いかもしれません。ごめんなさい。 この記事では、主に文字列に焦点を当てていますが、そのうちまた別のテーマでも書こうと思っています。 なお、前提としてるバージョンはHaskell Platform 2012.4.0.0と、それに付随するGHCやパッケージです。 OSも、Mac OS XやLinuxなどUNIX系の環境を想定しています。Windowsは持ってませんのでわかりません。ごめんなさい。 文字列 Haskellでは文

    Haskell Tips (文字列編) - りんごがでている
  • 栄光のグラスゴーHaskellコンパイルシステム利用の手引き バージョン7.8.2

    栄光のグラスゴーHaskellコンパイルシステム利用の手引き バージョン7.8.2 The GHC Team 目次 The Glasgow Haskell Compiler License 1. 参考訳 1. GHCの紹介 1.1. GHCを入手する 1.2. メタ情報: ウェブサイト、メーリングリストなど 1.3. GHCのバグを報告する 1.4. GHCのバージョン番号付け規則 1.5. Release notes for version 7.8.1 1.5.1. Highlights 1.5.2. Full details 1.5.2.1. Language 1.5.2.2. Compiler 1.5.2.3. GHCi 1.5.2.4. Template Haskell 1.5.2.5. Runtime system 1.5.2.6. Build system 1.5.3. Lib

  • Monad tutorial

    1. 函数プログラミングの集い2011 チュートリゕル 「モナドについて」 株式会社 Preffered Infrastructure 田中 英行 tanaka.hideyuki@gmail.com 2. 自己紹介 • 田中英行 (@tanakh, id:tanakh) • 株式会社 Preferred Infrastructure (PFI) 勤務 – 検索エンジンのゕルゴリズムとか作ってます • Haskell (2004~) • C++ (1998~) • BASIC (1992~) • プログラミングコンテスト愛好家 – ICPC, ICFPC, CodeJam, TopCoder, …

    Monad tutorial
  • MonadIOクラスのこと - 取り急ぎブログです

    昨日のモナドトランスフォーマーの勉強中に使ったliftIOですが、勘違いをしていたことにやっと気がつきました。liftIOの型情報は liftIO :: IO a -> m a と、この関数だけ見るとIOアクションをほかのどんな形のモナドにでも挿げ替えてくれるハッキーな関数のようにしか見えなかったのですが、もうちょっと周りを見ると、実は、このliftIOはMonadIOというクラスのメソッドなんですね。そして、このクラスのインスタンス宣言のほうにも大切な情報が隠れていました。 class Monad m => MonadIO m where liftIO :: IO a -> m a Instances MonadIO IO MonadIO m => MonadIO (ListT m) MonadIO m => MonadIO (ContT r m) (Error e, MonadIO m

    MonadIOクラスのこと - 取り急ぎブログです
  • Data.Aeson が便利すぎる件 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    JSON を扱うライブラリで一番簡単に見つかるのは Text.JSON ですが、しばらく使ってると、あまりの使いにくさに発狂しそうでした。 ということで他のを探した結果、Data.Aeson というのがかなりよさげだったので、これを使うことにしました。 しばらく使ってみた感じかなり良かったので、いくつか代表的な使い方を書いてみます。 インストール aeson ではなく、aeson-native を入れて下さい。 cabal install aeson-native import それぞれのコードは、これらの import (と LANGUAGE プラグマ)が先頭にあると思ってください。 {-# LANGUAGE OverloadedStrings #-} import Control.Applicative (Applicative,pure,(<$>),(<*>)) import Con

    Data.Aeson が便利すぎる件 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
  • モナドトランスフォーマーとmonad-control - maoeのブログ

    アドベントカレンダーのいいネタが無いなあと思っていたところ、ちょうど週末にあたらしいmonad-controlがリリースされたので、これを紹介したいなと思いました。 その前に、モナドトランスフォーマーというかっこいい名前の代物の話をちょっとだけしましょう。 モナドトランスフォーマーと例外処理 Haskellerの皆さんはきっと息をするかのように自然にモナドを使っていることと思います。標準で提供されているモナドは単機能なので、組み合わせたくなってきます。必然的に皆モナドトランスフォーマーに手を伸ばすわけです。実際のアプリケーションのコードを書くと、多くのモナドではベースモナドがIOになるでしょうから、今度は自作したカスタムモナドスタックでIOが投げる例外をハンドルしたくなるわけです。 ここでふとControl.Exception.catchの型をみると Prelude> :t Control

    モナドトランスフォーマーとmonad-control - maoeのブログ
  • cabal の使い方 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    cabal は dependency hell が怖いので、こんな使い方をするのが一番いいんじゃないかなーという方法です。 毎回 cabal-dev を使うのは非常に時間が掛かるし容量も取るのですが、まあ dep hell に引っかかって時間を無駄にするよりはいいんじゃないかなーと。 cabal は cabal-dev をインストールするだけ cabal install cabal-dev cabal の出番はこれだけで、あとは cabal-dev を使います。 とりあえず ~/.cabal/bin へのパスは通しておきましょう。 あと、cabal install cabal-dev に失敗してしまうようなら、もうスパッと rm -rf ~/.cabal rm -rf ~/.ghc とかやって、cabal 環境を綺麗にしてしまいましょう。 作りたいアプリケーションごとに cabal-dev

    cabal の使い方 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
  • 標準入力をブラウザでtail -fできるhtmlcatをHaskellで書いた - maoeのブログ

    GNU screen 使っているとはいえ開発中に諸々のログを流しておくのにウィンドウ使うのに慣れてなくて、タブ開きまくるならやっぱりブラウザを使いたいってことで、標準入力をブラウザに出してくれるツールを書きました。 標準入力をブラウザで tail -f できる htmlcat というのを書いた - NaN days - subtech というのを動かしてみたかったのですが、Perlの環境整備がうまくいかなかったので、Haskellで書いてみました。コードは短いのでここに貼っておきます。 maoe/htmlcat · GitHub {-# LANGUAGE ScopedTypeVariables, QuasiQuotes, OverloadedStrings, RecordWildCards, DeriveDataTypeable #-} module Main where import C

    標準入力をブラウザでtail -fできるhtmlcatをHaskellで書いた - maoeのブログ
  • 第57回 機能テストや性能テストをCabalで自動化

    前回は、ライブラリや実行可能ファイルを提供するパッケージをCabalで作る方法を説明しました。Cabalには、パッケージをテストするための機能も用意されています。今回はこの機能の使い方を説明します。 テスト・プログラムを用意する まず、Cabalのテスト機能を使って実行するテスト・プログラムを用意しましょう。単純に標準出力や標準エラー出力にメッセージを表示するプログラムでは不十分です。テストの結果をきちんとCabalのテスト機能に伝えるプログラムにする必要があります。 第16回で説明したHUnitのrunTestTT関数、第17回で説明したQuickCheckのquickeCheck関数、verboseCheckなどは、標準出力や標準エラー出力を使ってテスト結果を報告します。このため、そのままCabalのテスト機能にテスト結果を伝えることができません。 Cabalのテスト機能では、テストの

    第57回 機能テストや性能テストをCabalで自動化
  • 第56回 Cabalを使ってパッケージを作成する

    これまでの回では、Cabalを使って作成したHaskellのパッケージをたびたび利用してきました。しかし、そうしたパッケージの作り方をきちんと説明したことはありませんでした。今回は、Cabalによるパッケージの作成方法を詳しく説明します。 パッケージの雛形を作成する Cabalを使ったパッケージの構成には、多くのパッケージに共通する定型の部分と、パッケージごとに異なる部分が存在します。このうち定型部分の作成は自動化できます。 その目的でCabalが提供しているのがcabal initコマンドです。このコマンドを使うことで、パッケージの構成に必要な一通りのファイルを用意できます。新しくパッケージを作る場合には、cabal initコマンドでパッケージの雛形を作成するとよいでしょう。このコマンドの実行後に表示される個々の質問でのデフォルト値は、最新版の「cabal-install 1.16.0

    第56回 Cabalを使ってパッケージを作成する