タグ

Haskellに関するkarahiyoのブックマーク (18)

  • Haskell でのデバッグ - あどけない話

    「純粋関数型言語はデバッグしにくい。だって純粋な関数で printf デバッグできないから」とつぶやいている人をよく見かけます。これまで放置してきましたが、リツイートが50を超えたので、Haskellでのデバッグについて書きます。 例外処理と同じように、Haskell でのデバッグでは、純粋な関数と IO を分けて考える必要あります。 IO での printf デバッグ IO では、putStrLn や print が使えるから問題ないですよね? foo :: Int -> IO Bool foo i = do x <- あれして i putStrLn $ "x = " ++ show x これして putStrLn "ここも通過" -- それもする y <- それもする print y return y ちなみに、forkIO 起動した軽量スレッドから putStrLn する場合、軽量ス

    Haskell でのデバッグ - あどけない話
  • Haskell における配列の使い方

    リストを主なデータ構造とする Haskell にも配列はあります。しかし、Web で巡回しても、添字が整数以外でも OK とか、多次元配列の使い方とか、難しい ことを解説してあるページが多く、最も単純な添字が整数の1次元配列の基的 な使い方に関するページはほとんど無いような気がします。 そこでここでは、高度だけれど難しい機能の解説は他のページに任せて、 思いっきり単純な配列の使い方を解説したいと思います。 【配列の生成】 Haskell で配列を使うには、まず Data.Array モジュールを import します。 次に配列の生成の仕方ですが、連想リストというデータ構造を準備してやる必要 があります。連想リストとは [(添字1,要素1),(添字2,要素2),...,(添字n,要素n)] という形式のデータです。連想リストから配列を作ると、C言語風に書くと a[添字i] = 要素i (

  • 「関数プログラミング 珠玉のアルゴリズムデザイン」をScalaで実装してみる - セカイノカタチ

    Scala Advent Calendar 2014 - Qiita14日目の記事です。 昨日の記事は、 @gakuzzzz さんの play2-auth で OpenID とか Twitter OAuth とか OAuth2.0 とか でした。 さて、今日のネタです。。。 関数プログラミング 珠玉のアルゴリズムデザイン 作者: Richard bird,山下伸夫出版社/メーカー: オーム社発売日: 2014/11/12メディア: 単行(ソフトカバー)この商品を含むブログ (1件) を見る このですが、関数型プログラミングのアルゴリズムデザインを紹介したで、とても難しいのですが、面白いです。 Advent Calencdarのネタとして、これに出てくるアルゴリズムをScalaで実装してみたいと思います。 お題は、一番簡単そうな「第1章 最小自由数」です。 「最小自由数」を求める一番シ

    「関数プログラミング 珠玉のアルゴリズムデザイン」をScalaで実装してみる - セカイノカタチ
  • 関数プログラミング 珠玉のアルゴリズムデザイン

    演算子以外の構文記号の一部については,GHCの言語拡張UnicodeSyntaxを有効にするとソースコード中に記述可能です. 詳細については,GHCユーザーガイド 9.3.1 Unicode syntaxをご覧ください. 演算子に関しては,Unicodeの記号が使えますので,たとえば,1章については,以下のような定義モジュールをインポートすれば,そのままコードで表現できます. {-# LANGUAGE UnicodeSyntax #-} module Operators where import qualified Data.List infixr 5 \\ (\\) ∷ Eq a ⇒ [a] → [a] → [a] (\\) = (Data.List.\\) infix 4 ∈, ∉ (∈) ∷ Eq a ⇒ a → [a] → Bool (∈) = elem (∉) ∷ Eq a ⇒

  • コンパイルログとかに何かしら色をつけたい - ミントフレーバー緑茶

    最近はHaskellのを読んでいて写経したり色々試したりするのだけど、コンパイルログの見辛さによって、静的型付け言語の強みであるコンパイル時エラー検出の力が出せていないような気がした(ghcに--colorオプションとかある?)。 社内LTもあることだし、自動で色付けするマシーンを作ろうと思いたって作り始めた。テキストに自動で色をつけるというと、テキストをルールでパースして色をつけるというやり方になるかと思う。しかしいちいちパースルールを書くのもだるいし、テキストを適当に標準入力から突っ込むと適当に色付けしてくれるものが欲しい。 自分が知っている自動色付け方法はCoding in colorという、シンタックスハイライトされない部分にも色を付けて見やすくしてやろうというもの。 Coding in color — Hacking Programs : Code, Programming I

    コンパイルログとかに何かしら色をつけたい - ミントフレーバー緑茶
  • Go言語がダメな理由 | POSTD

    私はGo言語が気に入っていますし、多くの場面で使用します。現にこのブログもGoで書いています。Goは便利な言語ですが、優れた言語とは言えません。つまり、悪くはないけれど、十分ではないということです。 満足できない言語を使用する際は注意が必要です。注意を怠ると、その言語を次の20年間使い続ける羽目になるかもしれないからです。 私のGoに対する主な不満を文にまとめました。既に何度も指摘されていることも含まれていますが、中にはこれまでほとんど話題になっていない指摘もあります。 これから列挙する全ての課題には既に解決策があることを示すため、私が優良な言語と考えるRustやHaskellと比較して説明します。 汎用プログラミング 課題 誰でもさまざまな事柄に幅広く対応できるコードを記述したいと考えます。例えば数のリストの合計を求めるために定義した関数が、小数、整数、またその他の合計を求められるもの

    Go言語がダメな理由 | POSTD
  • System F - Wikipedia

    System F(システム・エフ)は、型付きラムダ計算の一体系であり、単純型付きラムダ計算に、型についての全称量化を取り入れた計算機構である。二階ラムダ計算、ポリモーフィックラムダ計算とも言われる。プログラミング言語でのパラメトリック多相を形式化するもので、関数型言語のMLやHaskellなどの型システムのベース理論にされている。System Fは、論理学者のジャン=イヴ・ジラールと計算機科学者のジョン・C・レイノルズの両者が別個に発見している。ジラールによるとSystem Fの語源は、たまたまそう名付けただけと言う。 単純型付きラムダ計算では、関数についての変数とその束縛が存在するが、System Fでは型についての変数とその束縛が追加されている。例えば恒等関数は任意の型についての形の型を持ちうるが、System Fではこのことが次の判断が成り立つことによって表されている。 . ここで、

  • Trying to figure out `random` function in Haskell

  • 『プログラミング Haskell』『すごい Haskell 楽しく学ぼう!』の次に何を読む?

    邦書の二大 Haskell 学習書を読み終えたら次は何を読めば良いのか? に対する偉大な先達のご意見。 途中から流れが Haskell の doctest の話題になっています。

    『プログラミング Haskell』『すごい Haskell 楽しく学ぼう!』の次に何を読む?
  • 電脳柔術家はソースコードの夢を見るか vimでhaskellの構文チェックをしてくれるsyntastic

    今回のお題。 vimでhaskellを書くときに便利なプラグインsyntasticを紹介。 「すごいHaskell こままさんと学ぼう」でお馴染みのこはまさん(@c0hama)にこんなのがあるって 話を聞いて、vimのプラグインsyntasticを導入してみました。 このプラグインはコンパイルする前にコードのエラーや警告を表示してくれるものです。 設定がいろいろと切り替えられるみたいですが、デフォルトで使ってみたところ、 保存のタイミング、またはコマンド「SyntasticCheck」したタイミングでエラーを チェックしてくれるようです。 使用 エラーを表示している様子がこちら。 エラー行の右端に赤いチェックが入ります。 dataのコンストラクタが小文字で始まっている、というエラーを表示しています。 カーソルが重なっていて、ちょっと見づらいですが、エラー位置に下線も表示されています。 また

  • 函数型なんたらの集い2014でモナドについて話してきた - think and error

    函数型なんたらの集い 2014 in Tokyo - connpass 最近私的にモナドが非常に熱いのでそれについて話してきました。 しかし資料としては要改善点が多いですね... 図入れるとか具体的なコード入れるとか色々出来たのですけど。 Engineer-uses-monads from Ruicc Rail 例 具体例をスライドに入れられなかったため、trivialな例を示す。 おおまかな雰囲気は感じられると思う。 明記してないけど、純粋関数は任意のモナド内でモナドとは関係なく使えます。 -- Derivingに必要 {-# LANGUAGE GeneralizedNewtypeDeriving #-} import Control.Applicative (Applicative) import Control.Monad.IO.Class (liftIO, MonadIO) imp

    函数型なんたらの集い2014でモナドについて話してきた - think and error
  • Haskellを愛する若者たちへ | POSTD

    この手紙は、”熟練者”ならではの知識を語るものではありません。新人かベテランかに関わらず、私たちの誰もが繰り返し学び、覚えておくべきことについて書いています。ここでは、一般的な傾向や、聞けばなるほどと思うような傾向、重要とされていることを新たに学んで興奮している時に見られる傾向を紹介します。また、学んだことの面白さや重要性を人にきちんと伝わるように話すことの難しさについてもお伝えします。この手紙はかなり具体的に書いています。一般的な話をするなら具体的なことも併せて話さなければ理解してもらえないと悟ったからです。これは代数的構造やその他の抽象的な概念についても言えることですね。この手紙には、私が頭に入れておきたい、また皆さんに共有したいアドバイスが詰まっています。インターネット上で適切とは言えない振る舞いをしている人に出くわした時、そんなことはめったにないでしょうが、そんな時に思い出したい内

    Haskellを愛する若者たちへ | POSTD
    karahiyo
    karahiyo 2015/02/21
    "Rilkeの『若き詩人への手紙』の1節を少し変えると、”必要から湧き出た知識は良質である。知識に対する評価は、その発端の本質にあり、他にはない”
  • モナド入門以前 - Qiita

    前書き これはモナドチュートリアルではない、だろう。 この文章を書く動機は、モナドを知らない人がモナドという未知の概念に期待しているものが根的にずれているかもしれないという懸念である。 命令型言語でプログラミングを覚えた人がモナド、もしくはHaskellや関数型言語(と言われる言語)を学習する際にしばしば受ける助言はこうだ: 「命令型言語で今まで習ったことを全て忘れて取り組むと良いよ」 この助言はそこまで外していないかもしれないが、雑である。 いつか僕の友人がこのようなことを言った: 「プログラマがチームで働く時、必要なのは相手を思いやる気持ちだよね」 この発言は恐らくそこまで外れてはいないが、思いやりで全てを解決しようとすると、全てのコストが非常に高くなる。個々の問題へ目を向け、それぞれの解法を知っておくことによってコストは低くすることが出来ると僕たちは知っている。まあ友人はそんなこと

    モナド入門以前 - Qiita
  • RTBの入札プロトコルを実装する - Qiita

    (Japan) Haskell Advent Calendar 2014 の4日目のエントリです。簡単なRTBのBidderを実装します。入札戦略ではなく、プロトコル周りに焦点を当てます。 RTB(Real-time bidding) RTBはオンライン広告の配信枠をリアルタイムに売買する仕組みです。視聴者が広告枠のあるWEBページを開いた瞬間にオークションが開始され、数百ミリ秒以内に落札者に指定された広告をWEBページに表示させるというものです。オークションを開催する側をSSP(Supply side platforms)、落札する側をDSP(Demand side platforms)と呼びます。詳細は wikipedia の説明をご覧ください。 今回は、オークションに参加するbidderを実装します。つまりDSP側のシステムとなります。既存のHaskellによるbidderの実装とし

    RTBの入札プロトコルを実装する - Qiita
  • ghc-mod の Vim プラグイン ghcmod-vim を書いた - eagletmt's blog

    kazu-yamamoto さんによって開発されている ghc-mod というコマンドとそのための一連の elisp がある. ghc-mod を利用して Vim で補完をサポートする neco-ghc を以前書いたが, 今回は ghc-mod のその他の機能をサポートする Vim プラグイン ghcmod-vim を書いた.eagletmt/ghcmod-vim - GitHub 必要なもの 当然 ghc-mod が必要なので cabal install ghc-mod でインストール. ~/.cabal/bin 等に ghc-mod が置かれますが,そこに正しくパスが通っていて実行可能であることを確認してください. 特に GVim, MacVim を使っていると,シェルでの環境変数と GVim, MacVim での環境変数が異なるケースがあるので… そして vimproc が必要です.

    ghc-mod の Vim プラグイン ghcmod-vim を書いた - eagletmt's blog
  • すごい Vim で Haskell を書こう ... の補足 - 反省はしても後悔はしない

    この記事は Vim Advent Calendar の 274 日目の記事です。昨日は id:osyo-manga さんの unite-highlight つくった でした。 はじめに 先週の日曜日(8/25)になごやまつりというイベントがあり、そこで Haskell を Vim で書く方法というネタで LT をしてきました。発表するのが決まったのが前日ということもありちゃんとまとまった内容になっていなかったので、エントリで少し補足を書きたいと思います。 すごいVimでhaskellを書こう@なごやまつり from cohama とりあえず、インデントをどうにかする 発表では「Haskell のデフォルトのインデントプラグインは全然ダメ」という発言をしましたが、間違いでした。訂正します。 「Haskell のデフォルトのインデントプラグインなんてなかった!」 まさか、ないとは...。 と

    すごい Vim で Haskell を書こう ... の補足 - 反省はしても後悔はしない
  • 部分適用をカリー化と呼ばないで - kmizuの日記

    カリー化と部分適用の違いについては、過去のエントリ カリー化 != 部分適用 で既に述べており、決着もついているので改めて書きません。 カリー化 != 部分適用のエントリを書いたのは2009年12月です。もう3年以上前の話になります。ですが、JavaScript界隈などをみると、未だにカリー化と部分適用の違いについての誤解は残っているようです。一方で、静的型付き言語界隈でそのような誤解をほとんどみかけません。カリー化が関数の「型」を変換する操作(関数)であるために、動的型付き言語にのみ慣れ親しんでいると、両者の違いがわかりにくいのかもしれません。 ある技術用語が指すものを誤解する事自体は仕方ないことですし、責めるものではありません。また、用語が指すものは時代を経ると変わっていくものだという主張もあるでしょう。ただ、カリー化という用語の定義は明確に定義されており、数十年もの歴史があります。こ

    部分適用をカリー化と呼ばないで - kmizuの日記
  • Amazon.co.jpふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門 (単行本)

    Amazon.co.jpふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門 (単行本)
  • 1