タグ

haskellとProgrammingに関するkomlowのブックマーク (15)

  • Haskellコードの高速化

    Haskellで速いコードを書くためのヒントを無秩序に集積したもの。環境としてはGHCを想定する。私は高速化について詳しい訳ではないが、思い付いたことはなんでもかんでも書くように心がけたので、運が良ければ何か役に立つ情報があるかもしれない。 並列処理のパフォーマンスについてはこの文章では触れない。まったく経験がないので。同じ理由で、浮動小数点数を多用した数値計算コードの効率化と、書き換え規則を多用する高水準の最適化も扱わない。 お願い: 文中に間違いや分かりにくい部分があれば指摘いただけると有難いです。また、他に載せた方が良さそうな最適化テクニックや、その他の改善提案があれば教えてください。掲示板またはメールまたはTwitter(@mkotha)までお願いします。 目次 基的なこと 遅延評価の計算量見積もりの方法と、GHCの内部に依存しないテクニック集。入門書を読んだけれども、Haske

  • Extensible Effects はモナド変換子に対する救世主になり得るか?

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

    Extensible Effects はモナド変換子に対する救世主になり得るか?
  • 「参照透過である」とは、何から何への参照がどういう条件を満たすことを言うのか - Qiita

    関数型プログラミングが流行していることもあって、頻繁に耳にする「参照透過性」という用語について考えます。 ∥ 参照透過性 - Wikipedia その過程で目にした、Stack Overflow 上の Reddy 氏の発言が面白かったので、ザックリと訳します。 用語の起源と、それがプログラミング言語に導入された経緯 一応意味は分かってはいるんですが、なぜ「副作用のない関数呼び出し」やら「変数への再代入の禁止」といった特性を「参照透過性」と呼称するのかが分かりませんでした。この場合の「参照」は、何が何を参照することであり、また、それがどういう状態にあることを「透過である」としているのかが、通り一遍調べてみても分かりませんでしたので、掘りに行ってきます。 英語Wikipedia の方には、この考え方がプログラミングの概念として導入された経緯についての論文が参考文献として挙げられています。

    「参照透過である」とは、何から何への参照がどういう条件を満たすことを言うのか - Qiita
  • The Typeclassopediaを訳しました, The Typeclassopedia - #3(2009-10-20)

    ■ [Haskell] The Typeclassopediaを訳しました The Monad.ReaderのIssue 13に掲載されたThe Typeclassopediaという記事が、Functor, Monad, Monoid, Applicative, Foldable, Traversable, Arrowといったような型クラスについて良くまとまっていて、そのあたりを知りたい時の取っ掛かりになりそうだったので翻訳してみました。 作者のBrent Yorgeyさんからも許可がいただけたので公開します。翻訳に慣れていないので変な日語(特に専門用語の日語訳はかなり怪しい)があったり、そもそも間違っていたりするかもしれませんので、何か見つけたらコメントを頂けると助かります。 ■ [Haskell] The Typeclassopedia by Brent Yorgey <first

  • Wadler: Monads

    Monads, Arrows, and Idioms Philip Wadler The arrow calculus Sam Lindley, Philip Wadler, and Jeremy Yalloop, Journal of Functional Programming 20(1):51&em;69, 2010. We introduce the arrow calculus, a metalanguage for manipulating Hughes’s arrows with close relations both to Moggi’s metalanguage for monads and to Paterson’s arrow notation. Arrows are classically defined by extending lambda calculus

  • 孤独のHaskell - ぼくのぬまち 出張版

    孤独のHaskellに行ってきた.ので,感想とそのフォローアップになりそうなことを書く. とてもいい会だったように思う. 遅刻して現場に付いたらRLEしてみようという例題("AABBCCC"を"A2B2C3"にする関数を書こう)をやっていて, id:khibino0 さんがおもむろに import Data.List ( group ) import Control.Arrow rle = concatMap (uncurry (:) . (head &&& show . length)) . group のような解をブッパしてたりするなど.で,各自自前実装してる人たちのコードとか見ると「細かい操作でボトムアップにやりたいことを実現しようとしてるなー」と感じることが多かった.Haskellの場合(なのかは知らないが)もっと大域的な変換からトップダウンに考えていったほうがシンプルでソレっぽい

    孤独のHaskell - ぼくのぬまち 出張版
  • Tagged union - Wikipedia

    In computer science, a tagged union, also called a variant, variant record, choice type, discriminated union, disjoint union, sum type, or coproduct, is a data structure used to hold a value that could take on several different, but fixed, types. Only one of the types can be in use at any one time, and a tag field explicitly indicates which type is in use. It can be thought of as a type that has s

  • FUNCTIONAL PEARLS Monadic Parsing in Haskell

  • 2004-07-30

    実は昨日の話題はこれから書こうとする話とつながりがあるのだ。 (直接的には無いけど) (序) 突然であるが、Haskellは文字列処理が強力だと思う。 それも最強レベルに。 他のいわゆる文字列処理が得意であるとされる言語のように 正規表現による置換が可能であるとか、文字列がオブジェクトで 有用なメソッドがたくさん使えるとかそういった 小手先のものではなくてもっと根的なレベルで強力なのである。 それはHaskellに於いて文字列が文字のリストであらわされていることに 起因する。わからない人から見ると文字列がリストであるということは Cにおいて文字列が配列で表されているのとかぶるかもしれない。 Haskellが文字列をリストとして持っていてうれしいというのは Haskellが全言語中でもほとんど最強のリスト操作能力を持っているからである。 Cで文字列が配列になっていても何もうれしくないのは、

    2004-07-30
  • 関数型言語を学ぶことは実務でどう役に立ったか - Rejasupoem

    関数型LT大会で「実社会の問題を解決する関数型言語」というタイトルで発表しました。 というのも、会社で「すごいHaskellたのしく学ぼう!」の輪読会をしていて、最初こそ10人以上の人が参加していたのだけど、章が進むごとにどんどん人が離脱していって、主催者としてはなんとか完走したいという思いがあったので、調べたのですが、 ヒアリングから、この二つの線がクロスしたときに、人は離脱するという知見が得られました。 ということで、Haskellに対して実用性を見出したいと思いながら半年を過ごしたのですが、実用的 = 仕事で使うということであれば、今の現場でHaskellに移行するのは現実的ではありません。 でも、Haskellには関数型言語のエッセンスが詰まっていて学びが多かったと思っていて、直接的には使っていないけど、概念として役立つことがあると思ったので、それを伝えるために今回文章に起こしまし

  • プログラム中級者が感じる関数型の違和感

    なんだか話題になってるから書く。 やっと初心者を脱して中級者になりかけてるプログラミング学習者が関数型言語に何を感じているかを書こうと思う。 1 圏論とかいらないんじゃないの?Haskellが短いコードでプログラムを書けるというのは分かる。 forループをmapやfoldで抽象化する利点も分かる。 それでやりたい処理のほぼ全てがまかなえるということも実感している。 副作用のない小さな関数を合成して大きな関数を作る利点も分かる。 再利用性も上がるし、どこからどう影響を受けているかが簡単に分かるからバグも出にくい。 ただ、Haskellの基礎になってる圏論が何の役に立つのかは、まったく分からない。 むしろ邪魔なんじゃないかと思う。 ファンクターやモナドの概念が圏論で扱われているのは分かるけど、圏論なんて名前だけ知ってればコードを書くのに不都合はないだろう。 圏論が必要なのは、Haskellを設

    プログラム中級者が感じる関数型の違和感
  • Haskell のデータ構築子 - あどけない話

    Haskell の代数データ型で使われるデータ構築子は、実は関数と同様に扱えます。たとえば、四則演算の式を表す代数データ型を以下のように定義したとします。 data Expr = C Int | Add Expr Expr | Sub Expr Expr | Mul Expr Expr | Div Expr Expr deriving Show "1 + 2" は "Add (C 1) (C 2)" と表現できます。この式を評価してみましょう。 Add (C 1) (C 2) → Add (C 1) (C 2) 当たり前ですが、そのものが返ってきます。 話は変わりますが、add という関数を素直に定義すると、こうなるでしょう。 add x y = x + y 式 "add 1 2" を評価するとこうなります。 add 1 2 → 3 すなわち、関数であれば簡略化されますが、データ構築子であ

    Haskell のデータ構築子 - あどけない話
  • https://github.com/Dobiasd/articles/blob/master/from_oop_to_fp_-_inheritance_and_the_expression_problem.md

    https://github.com/Dobiasd/articles/blob/master/from_oop_to_fp_-_inheritance_and_the_expression_problem.md
  • 経験15年のOCaml ユーザーが Haskell を仕事で半年使ってみた - camlspotter’s blog

    今の会社に移って半年経ちました。めでたく試用期間終了です。といっても別に試用期間中に密かに首を切られるような事をしたとか、逆に試用期間が終わったからと言ってこれで定年までのうのうと働ける、という訳ではありません。未来は全く判りません。まあとにかく、一つ区切りがやってきました。 金融を知らないQuantsの仕事 私の職業の肩書きには Quantitatitatitatitative という単語がくっついて超カッコよさそう。普通は Quant というと、金融工学や統計数理に詳しい夜もブイブイいわしている超イケメン20代を想像しますが、私は金融とか全然知らないアラフォーお父さんです。それでも Quant です。お願いですから、私に何を買ったらいいかとか、聞かないでください。金融商品とか買った事ないし。というか、逆に教えて欲しいです。 私のチームは、当の Quant さん達が開発した、金融派生商

    経験15年のOCaml ユーザーが Haskell を仕事で半年使ってみた - camlspotter’s blog
  • Haskell/Understanding monads - Wikibooks, open books for an open world

    There is a certain mystique about monads, and even about the word "monad" itself. While one of our goals of this set of chapters is removing the shroud of mystery that is often wrapped around them, it is not difficult to understand how it comes about. Monads are very useful in Haskell, but the concept is often difficult to grasp at first. Since monads have so many applications, people often explai

  • 1